C解决统计给定整数M和N区间,输出区间内的素数及其个数并对它们进行求和
例如:
输入:10 31
输出:
11 13 17 19 23 29 31
count = 7 ,sum = 143
思路:
1、素数就是除了1和其本身没有别的
2、可以从2开始设置一个循环,算num%i,若为0,则不是素数,退出循环,否则继续,为了减少复杂度,
可以将循环上限设置为num/2,因为当 i > num/2 时都可以找到已经算过的数字*2=大于num/2
代码:
#include<stdio.h>
#include<math.h>
#include<stdbool.h>
bool isSh(int num) {
int i;
for (i = 2; i <= num / 2; i++) {
if (num % i == 0) {
break;
}
}
// 找到最后都没找到num%i==0,就是素数
if (i == num / 2 + 1) {
return true;
}
else {
return false;
}
}
int main()
{
// 找出[M,N]之间的素数并求和
int M, N;
scanf_s("%d%d", &M, &N);
int count = 0,sum = 0;
for (int i = M; i <= N; i++) {
if (isSh(i)) {
printf("%d ", i);
count++;
sum += i;
}
}
printf("\ncount = %d ,sum = %d",count, sum);
return 0;
}
运行结果截图: