zoukankan      html  css  js  c++  java
  • 求一亿以内的回文质数(素数)

    求一亿以内的回文素(质)数

    先求质数再判断回文,效率低下;所以先构造回文数,再判断质数。
    偶数位的回文数都能被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  ;
    	}
    
    }
    
    
  • 相关阅读:
    CF460 A. Vasya and Socks
    HDU-2159FATE(二维完全背包)
    HDU-2844 Coins(多重背包)
    POJ 1014 Dividing(多重背包)
    HDU2191(多重背包)
    数据结构课程设计:稀疏矩阵(加、减、乘、求逆矩阵)
    (转载)线段树模板(来自胡浩大牛)
    poj2386(简单dfs)
    Poj1852
    poj2109
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075341.html
Copyright © 2011-2022 走看看