本题要求统计给定整数 M 和 N 区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出两个正整数 M 和 N (1≤M≤N≤500)。
输出格式:
在一行中顺序输出 M 和 N 区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:
10 31
输出样例:
7 143
代码:
#include <stdio.h>
#include <math.h>
int main(void)
{
int M, N, i, count = 0, sum = 0;
scanf("%d %d", &M, &N);
for (; M <= N; M++)
{
for (i = 2; i <= sqrt(M); i++)
{
if (M % i == 0)
{
break;
}
}
if (i > sqrt(M) && M != 1)
{
count++;
sum += M;
}
}
printf("%d %d", count, sum);
return 0;
}
提交截图:
解题思路:
如何判断一个数是不是素数:试除法。
性质:如果d能整除n的话,那么n / d也能整除n
n的所有约数都是成对出现的,d和n / d
所以我们在枚举的时候,可以只枚举每一对中较小的那一个
所以我们只枚举d <= (n / d)这样的d,即d * d <= n,d <= sqrt(n)