2017-02-24 51 views
-1

该方案适用于小的数字,但只要我有一个大的数量这样它不工作 这里是我的代码java程序给予空白输出

public class Main { 


    public static void main(String[] args) { 
     long no=600851475143L,i; 
     int result=0; 
     for(i=(no/2);i>=2;i--){ 
      if(no%i==0){ 
       if(checkPrime(i)){ 
        System.out.println("Longest Prime Factor is: " + i); 
        break; 
       } 
      } 

     } 

    } 
    private static boolean checkPrime(long i){ 
     for(long j=2L;j<=(int)Math.sqrt(i);j++){ 
      if(i%j==0) 
       return false; 
     } 
     return true; 
    } 

} 
+1

错误?输出? – Massimo

+1

从一瞥看它可能有效,但你确实意识到它将运行相当长的时间?在你的样品看起来会有几百亿次迭代... –

+0

我等了5-7分钟,仍然没有运气..只是空白输出 –

回答

0

分配长变量值我们不需要L在最后的值删除L

+0

没有L它给出错误,因为它超出了整数范围 –

0

显示答案需要时间。对于上面的代码,只需少量(1000000)即可尝试10到15分钟。

试试这个

public class Main { 
public static void main(String[] args) { 
    //long no=600851475143L,i; 
    System.out.println(largestPrimeFactor(600851475143L)); 
} 
public static int largestPrimeFactor(long number) { 
    int i; 
    for (i = 2; i <= number; i++) { 
     if (number % i == 0) { 
      number /= i; 
      i--; 
     } 
    } 
    return i; 
} 
} 

[1] https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

+0

你运行相同的代码只是改变了上述?它不适合我。 –