求素数的两种解法
#include<stdio.h>
#include<math.h>
bool prime(int n)
{
int i;
for(i=2;i<=(int)sqrt(n);i++)
if(n%i==0)
return false;
return true;
}
int main()
{
int n,i,j=0;
printf("n:");
scanf("%d",&n);
printf("小于等于%d的素数个数为:\n",n);
if(n>2)
{
printf("%4d",2);
j++;
}
for(i=3;i<=n;i+=2)
{
if(prime(i))
{
printf("%4d",i);
if(j!=0&&++j%10==0)
printf("\n");
}
}
printf("\n");
return 0;
}
/**
筛法的思想是去除要求范围内所有的合数,剩下的就是素数了,
而任何合数都可以表示为素数的乘积,因此如果已知一个数为素数,则它的倍数都为合数。
*/
#include <stdio.h>
#include <math.h>
#define N 10000001
int prime[N];
int main()
{
int i, j;
for(i=2; i<N; i++){
if(i%2) prime[i]=1;
else prime[i]=0;
}
for(i=3; i<=sqrt(N); i++)
{ if(prime[i]==1)
for(j=i+i; j<N; j+=i) prime[j]=0;
}
for(i=2; i<100; i++)
if( prime[i]==1 )printf("%d ",i);
printf("\n");
return 0;
}