【发布时间】:2014-09-04 22:12:41
【问题描述】:
我有一个生成素数的程序。当我想要前 100 和 200 个素数时,此代码工作正常,但每当我使用超过 300 的总值时,就会出现浮点异常。问题似乎出在数组中,但我不明白发生了什么。
#include<stdio.h>
int main()
{
int total = 500;
int primes[total];
primes[0] = 2;
int max = 1;
int current = 3;
int index = 0;
printf("%d\n",2);
while(max != total)
{
for(index = 0; index <= max + 1; index++)
{
if(index == max + 1){
primes[index] = current;
printf("%d\n",current);
max = max + 1;
current = current + 1;
break;
} else {
if(current % primes[index] == 0){
current = current + 1;
break;
}
}
}
}
}
【问题讨论】:
-
从不说“代码工作正常”。
-
index <= max + 1和index == max + 1错误。 -
性能小技巧:
current = current + 2;很好,因为所有偶数都不是素数;你可以用if (index == max + 1 || primes[index] * primes[index] > current)之类的东西替换if (index == max + 1)。 -
第一次在
for()循环中,index从0变为2。当index == 1,if(current % primes[1] == 0)被执行。primes[1]从未初始化。
标签: c arrays primes floating-point-exceptions