统计素数求和(嵌套循环)
标准答案
//算出m到n之间的素数个数及它们的累加和(参考答案)
#include<stdio.h>
int main()
{
int m,n;
scanf("%d %d",&m,&n);
int sum=0;
int cnt=0;
int i;
for(i=m;i<=n;i++)
{
int isPrime=1;
int k;
for(k=2;k<i-1;k++)
{
if(i%k==0)
{
isPrime=0;
break;
}
}
if(isPrime)
{
sum+=i;
cnt++;
}
}
printf("%d,%d\n",cnt,sum);
return 0;
}
重新写一遍,踩坑记录
//算出m到n之间的素数个数及它们的累加和(自己写的)
#include<stdio.h>
int main()
{
int m,n;
int i;
int cnt=0;
int sum=0;
//int cnt,sum=0; 赋值错误
scanf("%d %d",&m,&n);
for(i=m;i<=n;i++)//取出m到n之间的数
{
int isPrime=1;//默认这个数是素数
for(int k=2;k<i-1;k++)//开始检验这个数是不是真的是素数
{
if(i%k==0)
{
isPrime=0;//这个数不是素数时的情况
break;
}
}
if(isPrime)
{
cnt++;
//排查printf("%d\n",cnt);
sum+=i;
}
//排查printf("%d\n",cnt);
}
printf("%d,%d",cnt,sum);
return 0;
}
输出前50个素数
//输出前50个素数
#include<stdio.h>
int main()
{
int cnt=0;//对取到的素数进行计数
for(int i=1;cnt<50;i++)//外层循环对内存循环的判断对象进行取值,这里我们取到50个素数时结束循环
{
int isPrime=1;
for(int k=2;k<i-1;k++)//内层循环判断一个数是否为素数
{
if(i%k==0)
{
isPrime=0;
}
}
if(isPrime)
{
cnt++;
printf("%d\t",i);
if(cnt%5==0)
{
printf("\n");
}
}
}
return 0;
}
今日心得:要彻底理解一个嵌套的循环里面的参数,条件等是一件很困难的事情,我们只需要把循环看作一个计数器,需要的时候往里面再嵌套一层循环就可以了,不需要每个循环都去搞明白。有些时候会碰到循环的初始值取1还是0,又或者取n还是n-1这种问题,这个时候也不用纠结太多,试一下错,最后结果跑的对就可以了。
int cnt,sum=0;
这样的赋值方法是错误的,最后会导致前面的cnt的取值非常的奇怪,正确的做法是
int cnt=0;
int sum=0;

浙公网安备 33010602011771号