求n以内的素数

要求用C语言来实现
2025-12-14 11:24:13
推荐回答(6个)
回答1:

求质数的算法并不难,关键是要看算法的速度。我不敢说这个算法是最好的,不过上次和同事讨论过,应该是很高效的一个。
#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;
}

回答2:

int ss(int x)
{
int k;
for (k=2;kif (x%k==0)
return 0;
return 1;
}

main()
{
int i,n;
scanf("%d",&n);
for (i=2;i<=n;i++)
if (ss(i))
printf("%d ",i);
}

回答3:

#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;}}
}

回答4:

#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]);
}

回答5:

#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();//还是表示换行.
}

回答6:

#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);/*打印素数*/
}