统计素数并求和
错误代码
#include <stdio.h>
#include <math.h>
int main()
{
int m,n;
scanf("%d %d",&m,&n);
int div,flag;
int i,sum = 0,count=0;;
for(i=m;i<=n;i++)
{
flag=1;
for(div=2;div<=sqrt(i);div++)
{
if(((i%div)==0)||(i==1))
{
flag=0;
break;
}
}
if(flag==1){sum+=i;count++;}
}
printf("%d %d",count,sum);
return 0;
}
正确代码
#include <stdio.h>
#include <math.h>
// 判断一个数是否为素数的函数
int is_prime(int num) {
if (num <= 1) {
return 0; // 小于等于1的数不是素数
}
if (num == 2) {
return 1; // 2是素数
}
if (num % 2 == 0) {
return 0; // 除2外的偶数不是素数
}
// 只需检查到 sqrt(num)
int limit = (int)sqrt(num);
for (int i = 3; i <= limit; i += 2) {
if (num % i == 0) {
return 0; // 找到因数,不是素数
}
}
return 1; // 是素数
}
int main() {
int M, N;
scanf("%d %d", &M, &N);
// 检查输入范围
if (M < 1 || N > 500 || M > N) {
// printf("Input out of range.\n");
return 1;
}
int count = 0;
int sum = 0;
// 遍历区间 [M, N] 内的每个数
for (int i = M; i <= N; i++) {
if (is_prime(i)) {
count++;
sum += i;
}
}
// 输出结果
printf("%d %d\n", count, sum);
return 0;
}


