嗯……,这里就不多说了,直接就上代码吧,几种判定素数的方法,再加上一个素数筛:
//素性判定问题的测试版
//具体内容请参考《计算机程序与设计基础》(第二版) 乔林 编著 P125
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
int Is_prime1(unsigned int n);
int Is_prime2(unsigned int n);
int Is_prime3(unsigned int n);
int Is_prime4(unsigned int n);
int Is_prime5(unsigned int n);
int Is_prime6(unsigned int n);
int main()
{
for(int i = 2; i <= 100; i++)
{
if(Is_prime6(i))
printf("%8d",i);
}
system("pause");
return 0;
}
int Is_prime1(unsigned int n)//入门版,最基础的判断素数的方法
{
unsigned int i = 2;
while(i < n)
{
if(n % i == 0)
return 0;
i++;
}
return 1;
}
int Is_prime2(unsigned int n)//家庭基本版,在上面的基础上加以略微优化
{
unsigned int i = 2;
while(i <= (unsigned int)sqrt(n))
{
if(n % i == 0)
return 0;
i++;
}
return 1;
}
int Is_prime3(unsigned int n)//家庭高级版,在家庭版的基础上加以优化
{
unsigned int i;
if(n % 2 == 0)
return 0;
i = 3;
while(i <= (unsigned int)sqrt(n))
{
if(n % 2 == 0)
return 0;
i += 2;
}
return 1;
}
int Is_prime4(unsigned int n)//小型企业版,在上面的基础上消除浮点误差
{
unsigned int i;
if(n % 2 == 0)
return 0;
i = 3;
while(i <= (unsigned int)sqrt(n) + 1)
{
if(n % i == 0)
return 0;
i += 2;
}
return 1;
}
int Is_prime5(unsigned int n)//大型企业版,在小型企业版的基础上加以小小的优化
{
unsigned int i,t;
if(n % 2 == 0)
return 0;
i = 3;
t = (unsigned int)sqrt(n) + 1;
while(i <= t)
{
if(n % i == 0)
return 0;
i += 2;
}
return 1;
}
int Is_prime6(unsigned int n)//终极版,兼具容错功能和高效之便
{
unsigned int i,t;
if(n <= 1)
printf("Error");
if(n == 2)
return 1;
if(n % 2 == 0)
return 0;
i = 3;
t = (unsigned int)sqrt(n) + 1;
while(i <= t)
{
if(n % i == 0)
return 0;
i += 2;
}
return 1;
}
//素数筛法
#include <iostream>
#include <fstream>
//求得素数保存在data.txt中
const int N = 10000;
int ss[N];
int main()
{
using namespace std;
ofstream fout ("data.txt");
for (int i = 2; i <= N; i++)
ss[i] = 1;
for (int i = 2; i <= N; i++)
if(ss[i])
{
int k = 2,temp;
while((temp = k * i) <= N)
{
ss[temp] = 0;
k++;
}
fout << i << endl;
}
return 0;
}