我成功编写了这段代码:
#include <stdio.h>
#include <math.h>
int q;
int main()
{
srand( time(NULL) );
int n=3;
q=ceil(sqrt(n));
printf("%d\n %d\n", n,q);
if(n == 2)
printf("%d\n is prime", n);
else if(n % 2 == 0.0 || n < 2)
printf("%d\n is not prime", n);
else
{
int x;
for(x = 0; x < q; x++){
if(n % x == 0)
{
printf("%d\n is not prime", n);
return;
}
else
printf("%d\n is prime", n);
}
}
}
但是当我运行我的代码时,我收到以下错误:
浮点异常
这个错误意味着什么,我该如何解决?
答案 0 :(得分:27)
由n % x
引起,当x
为0时,你应该让x从2开始。你根本不应该使用浮点数,因为你只需要整数运算。
一般说明:
q
没有理由成为全球性的。答案 1 :(得分:1)
http://en.wikipedia.org/wiki/Division_by_zero
http://en.wikipedia.org/wiki/Unix_signal#SIGFPE
这应该给你一个非常好的主意。因为模数在其基本意义上是用余数除something % 0
IS除以零,因此会触发抛出SIGFPE。
答案 2 :(得分:0)
它是由n % x
引起的,其中x = 0
在第一次循环迭代中。您无法计算相对于0的模数。