欧拉计划 #3 超出整数范围 java

Project Euler #3 out of integer range java

该代码应该返回最大的质数。 有关此任务的更多信息: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));

有效并且 returns“29”。

然而,System.out.println(checkFactors(600851475143)); 不起作用,

“int 类型的 600851475143 超出范围”。

System.out.println(checkFactors(600851475143.0));

确实可以编译,但几秒钟后给我一个 ArithmeticException。

使用 long 作为 na 和 biggestPrimeFactor 的数据类型。这些值太大,无法存储在 int 变量中。

试着让你的参数变回 long 并在你的大数字后面加上字母 L 像这样 600851475143L,我认为它会起作用

600851475143 of type int is out of range

  • 这个数字大于 int 可以存储的数量。将 .0 附加到数字会将数字转换为 double,其中 可以 表示该数字
  • 你可以 checkFactors(600851475143d) 而不是 .0 来确保数字是双精度而不是整数