确定最大的素因子

时间:2014-04-20 11:36:44

标签: c algorithm prime-factoring

我试图运行强力算法来确定数字的最高素因子。这是我在C

中的代码
#include <stdio.h>
#include <stdlib.h>



long checkForHighestPrime(long param);

int main(){
    printf("%ld",checkForHighestPrime(600851475143L) );
    return EXIT_SUCCESS;

}


long checkForHighestPrime(long param){

        long d= 0;
        long h = 0;
        long i;

    for (i = 1; i <param; i++){

        //check if it's a factor

        d = param%i;

        // If it's a factor then determine whether its prime

        if(d == 0){

            for(long j = 0; j<i ; j++){
                if (d%j == 0){
                    break;
                }else{
                    h = d;
                }
            }

        }
    }
    return h;
}

但是我最终得到以下错误

Floating point exception: 8

我错过了什么?

3 个答案:

答案 0 :(得分:1)

在内部for循环中,将j初始化为0.这会导致d % j == 0抛出异常,因为您试图除以零。此外,d似乎应为i

答案 1 :(得分:0)

在这两行代码中:

for(long j = 0; j<i ; j++){
    if (d%j == 0){

您尝试查找d%0,这是一个错误。因为这是一个素数检查,你应该在2开始j。

为了提高代码的效率,我建议你在sqrt(i)而不是i处停止循环,因为每个非素数都至少有一个小于sqrt(i)的除数。此外,当您搜索最大因子时,我建议您从param / 2而不是1开始向后搜索。

答案 2 :(得分:0)

  

浮点异常:8

以下代码中的此错误

        for(long j = 0; j<i ; j++){
            if (d%j == 0){

j为零时,您将d除以零。

顺便说一句,这是一个重复的问题:

Find the largest prime number factor?

https://stackoverflow.com/questions/12940382/to-calculate-the-prime-factor-of-two-number

等等。