⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sprime.cpp

📁 dd牛的usaco源代码!对学习算法
💻 CPP
字号:
/*
ID: dd.ener1
PROG: sprime
LANG: C++
*/
#include <fstream>
#include <cmath>
using namespace std;

long N;
long maxp;
bool* prime;
basic_string<long> primes;

void input(){
	ifstream cin("sprime.in");
	cin>>N;
	maxp=1;
	for(long i=0;i<N;++i)
		maxp*=10;
	if(maxp>500000)maxp=500000;
}
void solveprime(){
	prime=new bool[maxp];
	memset(prime,true,sizeof(bool)*maxp);
	for(unsigned long i=2L;i<maxp;++i){
		if(!prime[i])continue;
		primes+=i;
		for(unsigned long j=i;;++j){
			if(i*j>=maxp)break;
			prime[i*j]=false;
		}
	}
}
inline bool isprime(long p){
	if(p<maxp)return prime[p];
	long len=primes.length();
	for(long i=0;i<len&&primes[i]*primes[i]<=p;++i)
		if(!(p%primes[i]))return false;
	return true;
}
inline void output(long p){
	static ofstream cout("sprime.out");
	cout<<p<<endl;
}
void search(long now,long len){
	if(len==N)output(now);
	now*=10;
	for(long i=0;i<=9;++i)
		if(isprime(now+i))search(now+i,len+1);
}
int main(){
	input();
	solveprime();
	search(2,1);
	search(3,1);
	search(5,1);
	search(7,1);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -