C语言求素数方法
确定性算法
缺点:慢
- 试除法
//1.试除法
int is_prime(int n)
{
int i;
if(n<=1)
return 1; //1表示素数
for(i = 2; i < n; i++)
// for(i = 2; i*i <n;i++) //改进版
{
if(n%i == 0)
return 0;
}
return 1;
}
- Eratosthenes求素数方法
//2.Erathosthens求素数方法
#denfine MAXNUM 1000
int main()
{
int i ,j;
int prime[MAXNUM+1]; //定义保存素数的数组
//初始化数组
for(i = 2;i <= MAXNUM;i++)
{
prime[i] = 1;
}
for(i = 2;i*i <= MAXNUM;i++)
{
if(prime[i] )
{
for(j = i*2; j*j <=MAXNUM;j++)
{
if(!prime[j] ) continue; //判断是否是合数
if(j%i == 0) prime[j]=0; //判断质因数是否为i,即是否是素数
}
}
}
int c=0;
for(i = 2; i < MAXNUM;i++)
{
if(prime[i])
printf("%d",i);
c++;
}
printf("共有%d个素数",c);
}
随机算法
优点:快
涉及较多数学定理,数学性较强
详见blog素数测试与随机算法
参考资料:《程序员的数学思维修炼》