【发布时间】:2018-03-15 14:36:18
【问题描述】:
我遇到以下代码“浮点异常,核心转储”的问题,但我什至没有一个浮点或双变量。通过检查 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;
}
【问题讨论】:
-
不相关但您的 long long 值之后不需要 L 吗?
-
你的 main() 中的 i 不是应该是 long long int 而不是 int 吗?
-
实际上它是供用户输入的,但为了测试,我输入了 12 位数字。如果我输入第一个数字,结果与 29 完全相同。
-
可能不相关,但您的代码效率极低。即使它工作得很好,也需要很多年才能产生产出。
main()中的循环迭代 3000 亿次,isPrime()中的循环平均迭代 1500 亿次。如果我错了,请纠正我,但在你的程序完成之前不是 4.5 quintillion 迭代吗? -
Fister 姐姐,GCC 编译器 5.4 && Core 2 du inside && 64 位操作系统
标签: c coredump floating-point-exceptions