#include <stdio.h>
#include <math.h>
#define BELOW 2000000
int isaprime (int num);
int main (void) {
int i;
float sum = 0;
for (i = 2; i < BELOW; i++) {
if (isaprime(i) == 1) {
sum = sum + i;
printf ("\n%d\t%.1f", i, sum);
}
}
getch();
return 0;
}
int isaprime (int num) {
int i;
for (i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
return 0;
}
else {
;
}
}
return 1;
}
最佳答案
使用 float因为 sum 是问题所在。最大的整数 k 使得来自 [-k, k] 的所有整数都完全可以用 32 位 float 表示是 2^241;之后你将开始失去一些整数的精度。由于您的总和超出了该范围,以荒谬的幅度,您失去了精度并且所有赌注都关闭了。