回文质数

题目描述
因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。
写一个程序来找出范围 a,b[a,b] (5 \le a < b \le 100,000,000)a,b( 一亿)间的所有回文质数。
输入格式 第 1 行: 二个整数 a 和 b .
输出格式 输出一个回文质数的列表,一行一个。
输入
5 500
输出
5
7
11
101
131
151
181
191
313
353
373
383
题目中的数据量较大,如果直接用暴力破解的方式肯定会超时,所以因该先找出题目中的质数或回文数字,将这些数据 放在一个数组了里,直接再这个数组里找到回文质数
判断数据的位数找回文数字

public static boolean show(int n) {//判断是否是质数
  for(int i=2;i<=Math.sqrt(n);i++) {
   if(n%i==0)return false;
  }
  return true;
 }
public static int huiwen(int n) {//位数为偶数
  int m=num(n);
  int x=n;
  int s=0;
  int []arr=new int[2*num(n)];
  for(int i=m-1;i>=0;i--) {
   arr[i]=n%10;
   n=n/10;
  }
  for(int i=m;i<2*m;i++) {
   arr[i]=arr[2*m-i-1];
  }
  for(int i=0;i<2*m;i++) {
   s=(int) (arr[i]*Math.pow(10, i))+s;
  }
  return s;
 }
 public static int hui(int n) {//位数为奇数时
  int m=num(n);
  int x=n;
  int s=0;
  int []arr=new int[2*num(n)];
  for(int i=m-1;i>=0;i--) {
   arr[i]=n%10;
   n=n/10;
  }
  for(int i=m;i<2*m-1;i++) {
   arr[i]=arr[2*m-i-2];
  }
  for(int i=0;i<2*m-1;i++) {
   s=(int) (arr[i]*Math.pow(10, i))+s;
  }
  return s;
 }

下面是判断质数的代码

public static boolean show(int n) {//判断是否是质数
  for(int i=2;i<=Math.sqrt(n);i++) {
   if(n%i==0)return false;
  }
  return true;
 }

主函数

public static void main(String[] args) {
  Scanner sc=new Scanner(System.in);
  int m=sc.nextInt();
  int n=sc.nextInt();
  int []arr = new int [20000];
  int x=0;
  for(int j=5;j<10000;j++) {   
    arr[x]=huiwen(j);
    x++;
    arr[x]=hui(j);
    x++;   
  }
 for(int i=0;i<20000;i++) {
   if(arr[i]>=m&&arr[i]<=n) {    
    if(show(arr[i])) {
     System.out.println(arr[i]);
    }
   }
  }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值