【发布时间】:2015-01-13 13:46:56
【问题描述】:
代码应该返回最大的素数。 更多关于这里的任务:https://projecteuler.net/problem=3
int checkFactors(double na) {
long n = (long) na;
int biggestPrimeFactor = 0;
for (int i = 1; i < n; i++)
if (n % i == 0 && isPrimFaktor(i) && i > biggestPrimeFactor)
biggestPrimeFactor = i;
return biggestPrimeFactor;
}
boolean isPrimeFactor(int n) {
int length= 0;
for (int i = n; i > 0; i--)
if (n % i == 0)
length++;
if (length== 2)
return true;
return false;
}
我决定将 checkFactors() 的参数设为双精度,因为我试图测试我的代码为什么不能正常工作。
System.out.println(checkFactors(13195));
工作并返回“29”。
但是,System.out.println(checkFactors(600851475143));
没用,
“600851475143 int 类型超出范围”。
System.out.println(checkFactors(600851475143.0));
编译但几秒钟后给我一个 ArithmeticException。
【问题讨论】:
-
为什么不使用更大的数据类型,例如 EG long 或 Biginteger?
-
看这里,也许这有帮助:stackoverflow.com/questions/7093186/…
标签: java integer arithmeticexception