本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:
10 31
输出样例:
7 143
思路:
本题需要判断区间内的素数个数和素数之和,可以通过编写一个判断素数的函数来实现。该函数接收一个整数参数,返回值为1表示该数为素数,返回值为0表示该数不为素数。
在主函数中,通过循环遍历区间内的所有整数,对于每个整数调用判断素数的函数,如果返回值为1,则计数器cnt加1,同时累加器sum加上该素数。最后输出cnt和sum即可。
需要注意的是,1不是素数,需要特判。另外,在判断素数时,只需要从2遍历到该数的平方根即可,可以减少不必要的计算。
完整代码:
#include <stdio.h>
#include <math.h>
int isprime(int a){
if(a==1) return 0;
if(a==2) return 1;
else{
for(int i=2;i<=sqrt(a);i++){
if(a%i==0) return 0;
}
return 1;
}
}
int main()
{
int m,n,cnt=0,sum=0;
scanf("%d %d",&m,&n);
for(int i=m;i<=n;i++){
if(isprime(i)==1){
cnt++;
sum+=i;
}
}
printf("%d %d",cnt,sum);
}