1. 程式人生 > >Java實驗(3) 迴文素數

Java實驗(3) 迴文素數

迴文素數指某一個數既是迴文數、又是素數,例如2, 3, 5, 7, 11, 101, 131,… 程式設計找出前100個迴文素數,並且要求按照每行10個的格式輸出。輸出方式任選。

1、本題主要變數的功能:

count1記錄一行已經輸出了幾個,實現每行輸出10個,整型,初始值為0

count2記錄已經輸出迴文素數個數,直到輸出100個,整型,初始值為1

isPalindromes是否是迴文數的標記,布林型,初始值為true

isPrime=true是否是素數的標記,布林型,初始值為true

n用於生成要進行判斷的數,整型,初始值為2

s儲存數字轉換成的字串,字串型,用於判斷是否為迴文數。

2、本題主要分為兩大模組:

A、判斷是否為素數:判斷數n能否被從2n-1的數整除,如果能則isPrime值變為false,跳出迴圈繼續判斷n+1

for(i = 2; i<n ;i++){

if(n % i == 0){

        isPrime=false;

break;

    }

}

B、判斷是否為迴文數:n已經經過判斷是素數,再講n轉化為字串,賦給s

for(j=0;j <= len/2-1;j++){

if(s.charAt(j) != s.charAt(len-j-1)){

        isPalindromes=false;

break;

    }

}

a、通過這個迴圈依次進行前部分元素與後部分元素的比較進行判斷是否為迴文數,如果出現不匹配的情況,則說明不是迴文數,isPalindromes=false,跳出迴圈。

b、如果isPalindromes=true則說明這個素數是迴文數,輸出,count2++count1++

c、每判斷完一個數都要將isPrimeisPalindromes的值恢復為true

            

public class PrimePalindromes {
    public static void main(String[] args) {
        int n=2,i,j,count1 = 0, count2 = 1;
        boolean isPalindromes = true;
        boolean isPrime = true;
        String s;
        while(count2 <= 100){
            for(i = 2; i<n ;i++){                 //判斷是否為素數
                if(n % i == 0){
                    isPrime = false;               //不是素數
                    break;
                }
            }
            if(isPrime == true){
                s = String.valueOf(n);            //將整型轉換為字串型
                int len = s.length();
                if(len == 1){
                    System.out.print(n + "\t");
                    count1++;
                    count2++;
                }
                else{
                    for(j=0; j <= len/2-1; j++){         //判斷是否為迴文數
                        if(s.charAt(j) != s.charAt(len-j-1)){
                            isPalindromes = false;      //不是迴文數
                            break;
                        }
                    }
                    if(isPalindromes == true){
                        System.out.print(n + "\t");
                        count1++;
                        count2++;                     //已輸出迴文數個數+1
                    }
                    if(count1 == 10){                   //一行輸出10個
                        System.out.print("\n");
                        count1=0;
                     }
                }
            }
            n++;
            isPrime = true;                           //每一次判斷後要恢復初始值
            isPalindromes = true;
        }
    System.out.print("\n");
}
}