我试图运行强力算法来确定数字的最高素因子。这是我在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
我错过了什么?
答案 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
等等。