求一億以內的迴文質數(素數)

求一億以內的迴文素(質)數

先求質數再判斷迴文,效率低下;所以先構造迴文數,再判斷質數。
偶數位的迴文數都能被11整除,自己證明去。所以,偶數位的迴文數除了11都是合數。

觀察偶數位的迴文數,提取所有奇數位的數字,與提取所有偶數位的數字,正好是相反的順序。
因此,偶數位數和等於奇數位數和,從而差等於0,而0能被11整除,因此這個迴文數,可以被11整除
例:1331 13 31
或者
an…a2a1a1a2…an.然後可將其改寫(首尾兩兩依次配對):an...a2a1a1a2...an=an*(10^(2n-1)+1)+...+a2*(10^(2*2-1)+1)*10^(n-2)+a1*(10^(2*1-1)+1)*10^(n-1)可以看到求和的每一項均有因式10^(2k-1)+1
而該因式又含有因式10+1=11,故和是11的倍數。

一個k位數,可以構造出一個奇數位的迴文數。比如13,可以構造131;189可以構造18981.所以100000000內的只要從1構造到9999即可。

import java.util.ArrayList;

public class 一億以內的迴文質數 {
	public static ArrayList<Integer> list = new ArrayList<Integer>(); 
	public static void main(String[] args) {
		list.add(11);
		for (int i = 2; i < 100; i++) {
			int tmp = i / 10, sum;

			for (sum = i; tmp != 0; tmp /= 10) {
				sum = sum * 10 + tmp % 10;
			}

			bool(sum);
		}
		System.out.println(list);
	}
	public static void bool(int n){
		int sqrt =   (int) Math.sqrt(n+0.5);
		for(int i:list){
			if(n%i==0){
				return  ;
			}
			else if(i>sqrt){
				return  ;
			}
		}
		list.add(n);
		return  ;
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章