迴文素數指某一個數既是迴文數、又是素數,例如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能否被從2到n-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、每判斷完一個數都要將isPrime和isPalindromes的值恢復爲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");
}
}