#include <stdio.h>
int main()
{
int n,i,j,sum,limit;
printf("Enter n:");
scanf("%d", &n);
sum = 0;
limit = 0;****
for (i = 2; i <=n; i++) {
limit = 0;
for (j = 2; j <=(i/2); j++) {
if (i % j == 0) {
limit = 1;
}
}
if (limit == 0) {
sum = sum + i;
}
}
printf("sum(n)=%d", sum);
return 0;
}
j<=i/2就够了啊,甚至这个还浪费了,只需要j<=sqrt(i)
因为判断一个数n是否为素数,逻辑是判断n是否是从2到n-1这些数中任何一个数的倍数,即求余是否为0
但更细致的判断可以知道,n不可能是大于n/2的倍数的,所以判断到i<=n/2就够了
更细致一点,j<=sqrt(i)就够了,比如16,判断到4就可以了,不需要到8,因为4*4=16,5以上不需要判断,因为另一个因子肯定会小于4,那么之前已经判断过了