C 不带浮点或双变量的浮点异常

C 不带浮点或双变量的浮点异常,c,coredump,floating-point-exceptions,C,Coredump,Floating Point Exceptions,我在下面的代码中遇到了一个问题,“浮点异常,内核转储”,但我甚至没有一个浮点或双变量。通过使用检查printf,我观察到它发生在isPrimeFunction中,其中存在执行阻塞 /* PROBLEM 3 The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 600851475143 ? */ #include <stdio.h> typede

我在下面的代码中遇到了一个问题,“浮点异常,内核转储”,但我甚至没有一个浮点或双变量。通过使用检查printf,我观察到它发生在isPrimeFunction中,其中存在执行阻塞

/*
PROBLEM 3
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
*/


#include <stdio.h>

typedef int bool;
const bool true=1;
const bool false=0;

bool isPrime(long long int number) {
    long long int i;
    for(i=2; i < (number/2); i++) {
        if(number%i == 0) {
            return false;
        }
    }
    return true;
}   

int main() {
    long long int number, largest;
    number=600851475143;
    largest=0;
    int i;

    for(i=1; i <= (number/2); i++) {
        if((number % i) == 0) {
            if(isPrime(i) == true) {
                largest=i;
            }
        }
    }
    if(largest != 0)    
        printf("Largest prime factor is: %lli\n", largest);
    else
        printf("There is no prime factor of the number.\n");    

    return 0;
}
/*
问题3
13195的主要因子为5、7、13和29。
数字600851475143中最大的素因子是什么?
*/
#包括
typedef int bool;
常数布尔真=1;
常数布尔假=0;
bool isPrime(长整数){
长内i;
对于(i=2;i<(数字/2);i++){
如果(编号%i==0){
返回false;
}
}
返回true;
}   
int main(){
长整型数,最大;
编号=600851475143;
最大值=0;
int i;

对于(i=1;i在
main
中,您的
i
是一个整数,因此很可能不足以容纳
number/2
,这意味着这是非常可能的(尽管这是未定义的行为)该
i
将被包装并最终为0。
number%i
将导致被零除,这是另一个未定义的行为,但很可能是系统生成浮点异常的原因(我的是)


注意:这不是一个很好的算法。只需计算一下你将循环多少次。如果你有6000亿这样的数字,即使它是素数,你也不会在循环内触发
isPrime
测试,你会看到将近一个小时的运行时。每次你在循环内进行测试,你的运行时就会增加很多。

main
中,您的
i
是一个int,因此很可能不够大,无法容纳
number/2
,这意味着这是非常可能的(尽管这是未定义的行为)该
i
将被包装并最终为0。
number%i
将导致被零除,这是另一个未定义的行为,但很可能是系统生成浮点异常的原因(我的是)


注意:这不是一个很好的算法。只需计算一下你将循环多少次。如果你拥有6000亿这样的数字,即使它是素数,你也不会在循环内触发
isPrime
测试,你会看到将近一个小时的运行时。每次你在循环内进行测试,你的运行时就会增加很多。

Un相关的,但是在你的多头值之后你不需要一个L吗?我在你的main()中不是吗应该是一个长整型而不是整型?实际上,这是为了用户的输入,但为了测试起见,我把那个12位数字放进去。如果我把第一个数字放进去,结果与第29个数字完全相同。也许没有关系,但你的代码效率非常低。即使它工作得很好,也需要很多年才能产生一个输出。
m中的循环ain()
迭代3000亿次,
isPrime()中的循环
平均迭代1500亿次。如果我错了,请纠正我,但这不是在程序完成之前的45亿次迭代吗?Fister修女,GCC编译器5.4&&Core 2 du inside&&64位OSUnrelated,但在long long值之后不需要L吗?我在main()中不是吗应该是一个长整型而不是整型?实际上,这是为了用户的输入,但为了测试起见,我把那个12位数字放进去。如果我把第一个数字放进去,结果与第29个数字完全相同。也许没有关系,但你的代码效率非常低。即使它工作得很好,也需要很多年才能产生一个输出。
m中的循环ain()
迭代了3000亿次,而
isPrime()中的循环平均迭代了1500亿次。如果我错了,请纠正我,但这不是在程序完成之前的450亿次迭代吗?Fister修女,GCC编译器5.4&&Core 2 du inside&&64位操作系统