2017-02-24 163 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

你運行相同的代碼只是改變了上述?它不適合我。 –