本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:
10 31
输出样例:
7 143
AC代码块记录:
#include <stdio.h>
int main()
{
int arr_sushu[505] = {0};
arr_sushu[2] = 2;
for (int i = 3; i <= 500; i++)
{
int j;
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
break;
}
}
if (j == i)
{
arr_sushu[i] = i;
}
}
int a = 0, b = 0;
int num = 0, sum = 0;
while (scanf("%d %d", &a, &b) != EOF)
{
for (int i = a; i <= b; i++)
{
if (arr_sushu[i] != 0)
{
num++;
}
sum += arr_sushu[i];
}
printf("%d %d\n", num, sum);
}
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/8bbe2d87bd2fb699f3fe0ebeec8df405.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bc3f4918db7febca9bec19d89a7f63a0.png)
其中将0-500的所有素数判断并存入数组,数组下标与数字相对应,非素数时数组存入值为0。用数字2(素数)和4(非素数)举例:arr_sushu[2]==2;arr_sushu[4]==0。这样做方便题目中后续给出区间时的计算。
int arr_sushu[505] = {0};
arr_sushu[2] = 2;
for (int i = 3; i <= 500; i++)
{
int j;
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
break;
}
}
if (j == i)
{
arr_sushu[i] = i;
}
}
此时再给出区间后,求区间内素数和时,就可以将区间内所有值相加,因为非素数下标中存入的是0,不影响最后结果。用区间[5,10]举例:直接用for循环将arr_sushu[5]到arr_sushu[10]全部相加,因为此时数组中arr_sushu[5]==5,arr_sushu[6]==0,arr_sushu[7]==7,arr_sushu[8]==0,arr_sushu[9]==0,arr_sushu[10]==0,得出的和就是[5,10]中所有素数的和。
C语言小白,刷题自存,如有帮助不胜荣幸。 若您有更优解感谢投稿。 🔼