第1个回答 2008-04-10
二步走:
1.100以内的算法
for(i=2;i<100;i++)//遍历100以内的数
{for(j=2;j<i;j++)
if(i%j==0)break;//若不是素数,跳出内循环
if(j>=i)a[k++]=i;//a[k]数组用来存放素数i
}
2.每行输出10个数
for(k=0;k<100;k++)
if(k%10==0)printf("%c",'\n');//当数组中的数为10的倍数时就输出换行符‘\n',
第2个回答 2008-04-10
#include<stdio.h>
#include<time.h>
#define N 10000000 //你要求的范围的最大值
int a[N];
void prime(long n) //用筛法将不是素数的值置0
{
long i,j;
a[1]=0;
for(i=2;i<n;i++)
a[i]=1;
for(i=2;i<n/2;i++)
if(a[i])
for(j=i*2;j<n;j=j+i)
a[j]=0;
}
int main()
{
int m,n,sum,i;
clock_t start,finish;
while(scanf("%d",&n))
{
start=clock();
prime(n);
sum=1;
for(i=3;i<=n;i++)
if(a[i])
sum++;
printf("%d\n",sum);
finish=clock();
printf("%lf\n",(double)(finish-start));
}
return 0;
}
只要你有足够的内存,你可以将N定义得足够大,那样你就能求更大的范围内的素数,我这个只是统计素数的个数,你要输出的话也可以,随便改一下就行
#include<stdio.h>
#include<time.h>
#define N 10000000 //你要求的范围的最大值
int a[N];
void prime(long n) //用筛法将不是素数的值置0
{
long i,j;
a[1]=0;
for(i=2;i<n;i++)
a[i]=1;
for(i=2;i<n/2;i++)
if(a[i])
for(j=i*2;j<n;j=j+i)
a[j]=0;
}
int main()
{
int n,i;
while(scanf("%d",&n))
{
prime(n);
for(i=2;i<=n;i++)
if(a[i])
printf("%d\t",i);
}
return 0;
}
这个可以将10000000以内的所有素数都能输出
你只要求100以内的,在运行程序后输入100,回车即可
我下面的这个好像没用到别的吧,我上面的只是为了输出时间才写的,你看下面的就行了