项目欧拉#3:最大的主要因素

时间:2017-02-05 13:26:50

标签: algorithm

优化代码以找到给定数字的最大素数因子? 下面的代码适用于小输入案例但不适用于大输入案例

 public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    long n = in.nextLong();
    long i=n;
    if(n%2==0)
       i=i-1;
    for(;i>=1;i-=2)
       {
         if(n%i==0&&prime(i))
            break;
       }
    if(n%2==0&&i<2)
        System.out.println(2);
    else
        System.out.println(i); 
}
public static boolean prime(long n)
    {
       if(n%2==0)
          return false;
    for(long i=3;i<=Math.sqrt(n);i+=2)
        {
        if(n%i==0)
            return false;
    }
    return true;
}

2 个答案:

答案 0 :(得分:1)

试试这个

public long largestPrime(long n){
  long ans = 0;
  while(n % 2 == 0){
    n/=2;
    ans = Math.max(ans, 2);
  }
  for(long i = 3; i*i <= n; i++){
     while(n%i == 0){
        n /= i;
        ans = Math.max(ans, i);
     }
  }
  if(n > 1) ans = Math.max(n, ans); 
  return ans;
}

答案 1 :(得分:0)

我已经编写了下面的代码,它非常适用于大数字。

public static void main(String[] args) {

        long result = largestPrimeFactor(600851475143L);
        System.out.println("Result : " + result);
    }

    public static long largestPrimeFactor(long num) {

        long largest = -1;
        long i = 2;
        while (num > 1) {
            if (num % i == 0) {
                num /= i;
                if (largest < i)
                    largest = i;
            } else {
                i++;
            }
        }
        return largest;
    }
相关问题