0

该代码应该返回最大的素数。更多关于这里的任务: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));

确实编译但几秒钟后给了我一个算术异常。

4

3 回答 3

2

600851475143 of type int is out of range

  • 这个数字比int可以存储的要大。附加.0到数字将数字转换为double可以表示该数字的 a
  • 而不是.0你可以checkFactors(600851475143d)确保数字是双精度而不是整数
于 2015-01-13T14:01:01.637 回答
1

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

于 2015-01-13T13:58:31.607 回答
1

像这样在你的大数之后尝试让你的参数变回long并写信,我认为它会起作用L600851475143L

于 2015-01-13T13:59:45.330 回答