1

这是我的代码:

public static boolean isPrime(long num)
    {
        for(long i=2; i<=num/2; i++)
        {
            if(num%i==0)
            {
                return false;
            }
        }
        return true;
    }

    public static long findLargestPrimeFactor(long n)
    {
        long max=0;
        for(long factor=2; factor<n; factor++)
        {
            if(n % factor==0)
            {
                if(isPrime(n/factor)==true)
                {
                    max=factor;
                }
            }
        }
        return max;
    }

但是,当我运行它时,它说整数 600851475143 太大了。谁能帮我?

4

1 回答 1

7

我打赌你打电话

 isLargestPrimeFactor(600851475143);

因为这是 Project Euler #3 中给出的问题。这将无法编译并出现错误:

  error: integer number too large: 600851475143

正确的?如果是这种情况,请尝试:

 isLargestPrimeFactor(600851475143L);

“L”后缀告诉编译器你的意思是它是一个 long 文字,而不是一个 int(否则编译器会将它视为一个整数文字,并且它太大而无法放入 int)

于 2013-09-25T04:34:26.987 回答