不用学历也能考的证书:请把你们所知道的C语言中找质数的算法都编出来告诉我,拜托了!

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/15 04:46:36
我用C语言编程找质数,在比较小的区域内可以实现,但是区域一大,就有很多合数跑出来了,就是不全是质数,请帮帮我,快考试了啊 !

//以前朋友写的一段C的,效率很高,我自己写的不及他
//Problem: Prime Ring Problem
//00:00.71 436K
//戴帽子的 2004-04-22
//=============================
#include <iostream>
#include <ctime>
#include <fstream>

using namespace std;

/*
#define cout out

ofstream fout("time.txt");
ofstream fin("hziee.txt");

ostream& out = fin;
ostream& timeout = fout;
*/
ofstream fin("hziee.txt");
int kase;
bool P[21][21];
short in[21];
short result[20];
short N;

bool Prime(int n)
{
int i;
for(i=2; i<n; i++) {
if(n%i==0)
return false;
}
return true;
}

void initial()
{
int i,j;

kase = 0;

for(i=1; i<21; i++){
for(j=i; j<21; j++) {
P[i][j] = Prime(i+j);
P[j][i] = P[i][j];
}
}
}

void Print()
{
int i;
for(i=0; i<N-1; i++)
fin<<result[i]<<" ";
fin<<result[i]<<endl;
}

void hziee(int k)
{
int i;
if(k == N)
{
if(P[result[0]][result[N-1]])
Print();
return;
}
for(i=result[k-1]%2 + 1; i<=N; i += 2) {
if(in[i])
continue;
if(P[result[k-1]][i]) {
result[k] = i;
in[i] = true;
hziee(k+1);
in[i] = false;
}
}
}

int main()
{
int i;
clock_t start, end, start1, end1;
start = clock();

initial();

end = clock();
cout<< double(end - start) / CLK_TCK <<endl;

in[1]=true;
result[0]=1;
cin>>N;

start1 = clock();

fin<<"Case "<<++kase<<":"<<endl;
for(i=2; i<=N; i++)
in[i] = false;
if(N%2 == 0)
hziee(1);
fin<<endl;

end1 = clock();
fin<< double(end1 - start1) / CLK_TCK <<endl;

return 0;
}

最好把你的程序先给出来
看看问题在那里吧