统计素数求和(嵌套循环)

标准答案

//算出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; 
posted @ 2021-05-12 20:21  KONGQer  阅读(615)  评论(0)    收藏  举报