0

我遇到以下代码“浮点异常,核心转储”的问题,但我什至没有一个浮点或双变量。通过检查 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;
}
4

1 回答 1

6

In mainyour iis an int 因此很可能不够大以适应number/2这意味着很可能(尽管这是未定义的行为)i将包装并最终最终为0。number % i然后将导致除以零,这是另一种未定义的行为,但相当可能为什么您的系统会生成浮点异常(我的会)。

注意这不是一个很好的算法。只要数一数你会循环多少次。有一个像 6000 亿这样的数字,即使它是素数,并且您永远不会isPrime在循环内触发测试,您正在查看接近一个小时的运行时间。每次您在循环内进行测试时,您的运行时间都会增加很多。

于 2018-03-15T14:46:49.747 回答