2017-10-15 138 views
1

我試圖讓數字讓我們叫它reversedPrime顛倒的素數是一個數字,可以是一個素數,它的倒數是質數,例如17是素數它的倒數71也是素數其reversedPrime,我已經寫了一個完整的例子:獲取質數及其作爲素數的反轉

public static void printReversedPrime() { 
    int NUMBER_OF_REQUiRED = 100; 
    int NUMBERS_PER_LINE = 10; 
    int count = 0, number = 1; 

    while (count < NUMBER_OF_REQUiRED) { 
     if (isReversedPrime(number)) { 
      count++; 
      if (count % NUMBERS_PER_LINE == 0) 
       System.out.println(number); 
      else 
       System.out.print(number + " "); 
     } 


     number++; 
    } 
} 

private static boolean isReversedPrime(int number) { 
    return isPrime(number) && nonPalindromicIsPrime(number); 
} 

private static boolean nonPalindromicIsPrime(int number) { 
    int digit; 
    int reserved = 0; 
    for (int i = 0; i <= number ; i++) { 
     digit = number % 10; 
     reserved = (reserved * 10) + digit; 
     number = number/10; 
     // System.out.print(reserved); 
    } 



    return isPrime(reserved); 
} 

private static boolean isPrime(int number) { 
    for (int divisor = 2; divisor <= number/2 ; divisor++) { 
     if (number % divisor == 0){ // if true number is not prime 
      return false; 
     } 
    } 
    return true; 
} 

我執行程序,但我有一個奇怪的了,說,我應該像一些事情:

13 17 31 37 71 73 79 97 107 113 149 157 167 179 199 311 337 347 359 389

b UT我越來越:

11 22 33 55 77 11111 33113 77117 99133299211331 77337 11433477433599511677611771 33773 99779 33899877997 110330770990331113 772113131 773137 993994115775336776337173 997179 118119191

我做了什麼錯?

也許有人指點我?

+2

是在方法'print語句nonPalindromicIsPrime'打算?我猜你的輸出會受到它的影響 – Parag

+1

你正在減少nonPalindromicIsPrime中的數字,同時保持條件爲I <=數字。您應該使用while循環代替 – Assafs

+0

感謝您指出,我忘了刪除該打印語句。 @Assafs確實在使用while循環,但是爲了得到正確的結果而改變了它 – user1058652

回答

2

如果你有興趣在一個functional解決方案,使用streams從Java 8:

IntStream.iterate(2, value -> value + 1) 
      .boxed() 
      .map(integer -> new BigInteger(Integer.toString(integer))) 
      .filter(bigInteger -> 
       bigInteger.isProbablePrime(10) && 
         new BigInteger(new StringBuilder(bigInteger.toString()).reverse().toString()).isProbablePrime(10)) 
      .limit(NUMBER_OF_REQUiRED) 
      .forEach(System.out::println); 
+0

所以我不想讓我的手弄髒代碼,只是一個簡單的函數爲我做的。 thnx – user1058652

0
import org.apache.commons.math3.primes.Primes; 

public class Main { 
    public static void main(String[] args) { 
     for(int number=11; number<11111; number++) { 
      if(Primes.isPrime(number) == false) { 
       continue; 
      } 

      String string = new StringBuilder("" + number).reverse().toString(); 

      if(Primes.isPrime(Integer.valueOf(string)) == false) { 
       continue; 
      } 

      System.out.println(number); 
     } 
    } 
} 
+0

在範圍[11..11111]中,以數字2,4,5,6或8開頭的任何數字在顛倒時不會成爲素數,允許20,50,200,500等作爲例外。沒有必要測試這些數字。大部分循環可以跳過,例如4001到6999。 – rossum