求质数的算法并不难,关键是要看算法的速度。我不敢说这个算法是最好的,不过上次和同事讨论过,应该是很高效的一个。
#include
#include
#include
#define MAX_NUM 1000000
int main()
{
long start = clock();
int num = 0;
int* primes = (int*)malloc( MAX_NUM*sizeof(int) );
primes[num++] = 2;
unsigned __int64 temp;
for(int i = 3; i <= MAX_NUM; i+=2 )
{
for( int j = 1; j < num; ++j )
{
if( i%primes[j] == 0 ) goto NOT_PRIME;
temp = primes[j]*primes[j];
if( temp >= i ) break;
}
primes[num++] = i;
NOT_PRIME:
;
}
printf("find %d primes, cost %ld\n", num, clock()-start);
free(primes);
getchar();
return 0;
}
int ss(int x)
{
int k;
for (k=2;k
return 0;
return 1;
}
main()
{
int i,n;
scanf("%d",&n);
for (i=2;i<=n;i++)
if (ss(i))
printf("%d ",i);
}
#include
#include
#define N 100
void main(void)
{ int m,i,j,n;
printf("%4d",2);
n=1;
for(i=3;i<=N;i+=2)
{ if(n%10==0)
printf("\n");
m=(int)sqrt(i);
for(j=2;j<=m;j++)
if(i%j==0) break;
if(j>=m+1)
{printf("%4d",i);
n=n+1;}}
}
#include
#include
int main()
{
for(i=1;i<=sqrt(n);i++)
{
for(j=2;jif(i%j<>0) a[s++]=i;
}
for(i=1;i<=s;i++)
printf(%d,a[i]);
}
#include
main()
{
int m,k,i,n=0;
for(m=0;m
k=sqrt(m)//表示开M的平方根.
for(i=2;i<=k;i++)
if(m%i==0) break;
if(i>=k+1)
{
printf("%d",m);//表示输出一个数字然后换行.
n=n+1;
}
if(n%10==0)
printf("\n");
}
printfln();//还是表示换行.
}
#include
main()
{
int
i,k,n;
n=0;
scanf("%d",&n);//输入N
for(i=1;i<=n;i++)
{
for(k=2;kif(i%k==0)
break;
if(i==k)
printf("%d",i);/*打印素数*/
}