用筛选法求100内的素数,每行输出10个。

我是c语言初学者,希望不要用到我还没学到的东西来解,最好用到数组与字符串的内容来解!!

:判断1-100之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。
2.程序源代码:
#include "math.h"
main()
{
int m,i,k,h=0,leap=1;
printf("\n");
for(m=1;m<=100;m++)
{ k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{leap=0;break;}
if(leap) {printf("%-4d",m);h++;
if(h%10==0) //输出十个数后换行
printf("\n");
}
leap=1;
}
printf("\nThe total is %d",h);
}
温馨提示:答案为网友推荐,仅供参考
第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,回车即可

我下面的这个好像没用到别的吧,我上面的只是为了输出时间才写的,你看下面的就行了
第3个回答  2008-04-10
#include<iostream>
using namespace std;
int prime(int n)//求素数过程,是返回1,不是返回0
{
for(int i=2;i<int(n);i++)
if (n%i==0)return 0;
return 1;
}
void main()
{
int i=0;
for(int j=2;j<100;j++)
{if(prime(j)==1){cout<<j<<" ";i++;}
if (i%10==0)cout<<endl;}
}