本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:
10 31
结尾无空行
输出样例:
7 143
结尾无空行
vs2019
//输入最小值最大值
//判断素数:1.列举出所有在范围内的整数x
//2.判断是否是偶数
//3.判断是否有可以整除的
//4.如果没有count+1,x加到sum中
//5.注意1和2
//输出
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int M = 0, N = 0,a=2,count=0,c=0,sum=0;
scanf("%d%d", &M, &N);
int x = 0;
x = M;
while (x <= N)
{
//不要忘记2的情况(2是偶数,是素数)
if (x == 2)
{
count++;
sum += x;
}
if (x % 2 != 0)
{
for (c=0; a < x; a++)
{
if (x % a == 0)
{
c = 1;//c用来记录x能被整除的情况
break;//算到有一个数x可以整除就可以停下了
}
}
a = 2;
//M可能为1,x=1时不会使c=1,但1不是素数,所以要特殊说明
if (x == 1)
{
c = 1;
}
//是素数时用count记有几个,sum计算和
if (c == 0)
{
count ++;
sum += x;
}
}
x++;
}
printf("%d %d", count, sum);
return 0;
}
注意:1.记得每一次for循环后都要让c和a赋初值,可以在for语句的表达式1位置上加上c=0,a=2。(我当时没把a=2写到里面去,但写到里面是可以的)
2.当x=2时要特殊处理,2为偶数却是素数。还有1,也很特殊。
3.我读题时一直在纠结要不要算N和M,事实证明要算上。如果不算M可以将x++放在循环的最开始,我是这么想的。
今天PTA上人怎么这么多。