2015-08-25 55 views
-2

問題: 愛麗絲和鮑勃在很長一段時間後會面。像往常一樣,他們喜歡玩一些數學遊戲。這一次愛麗絲接電話並決定遊戲。這場比賽非常簡單,Alice說出一個整數,Bob不得不說這個數字是否爲素數。像往常一樣,鮑勃知道邏輯,但是由於愛麗絲沒有給鮑勃很多時間思考,所以鮑勃決定編寫一個計算機程序。 幫助鮑勃通過編寫計算機程序來完成這項任務,該程序將計算該數字是否爲素數。 輸入Codechef「Primality Test」錯誤的答案

輸入的第一行包含Ť測試用例,T線遵循 每個T線的包含具有要被在一個單獨的行爲素性 輸出

對於每組測試輸出測試一個整數n ,「是」,如果數字是其他黃金「不」

我的解決辦法:

`import java.io.*; 
import java.math.*; 
import java.util.*; 
class ex6 
{ 
public static void main(String args[])throws IOException 
{ 
    try 
    { 
     BufferedReader input=new BufferedReader(new InputStreamReader(System.in));   
    int t=0; 

     t=Integer.parseInt(input.readLine()); 

    int n=0; 
    int c=0; 

    while(c!=(t)) 
    { 
     int j=0; 
     n=Integer.parseInt(input.readLine()); 
     if(n==1) 
     System.out.println("No"); 
     else{ 
      for(int x=2;x<n/2;x++) 
      { 
      if(n%x==0){j++;break;} 
      } 
      if(j==0) 
      System.out.println("Yes"); 
      else 
      System.out.println("No"); 
     } 

      c++; 


     } } 
catch(Exception e) 
{return;}}}` 
+1

你得到的結果是什麼?也許是錯誤? –

+0

假設您正確複製了問題,則在所需的輸出中沒有大寫字母。 – moreON

+0

感謝您指出,我得到了答案! –

回答

1

你的整個做法是錯誤的,瞭解https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes。此外,所有這些練習都假定您使用了已知的算法。

這個想法是你有一個帶有布爾值的數組,其中「真」意味着「素數」和「假」意味着「非素數」,你所做的是從一個所有真布爾值數組開始1和0),然後從2開始消除2的倍數(標記它們爲假),然後移動到下一個素數,即3,標記錯誤倍數等,直到完成爲止。

+0

我可能不熟悉codechef,但sieves僅適用於連續數字列表。 – warren

+0

@warren,你的觀點是? – Pavel

+0

@warren,你的連續數字是布爾數組中的索引。所有你做的,當你得到一個輸入值時,V是檢查數組[V]是否爲真,如果是,那麼它是一個素數。 – Pavel