[编程题] 神奇数
时间限制:1秒
空间限制:32768K
给出一个区间[a, b],计算区间内“神奇数”的个数。
神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。
比如:153,可以使用数字3和数字1组成13,13是质数,满足神奇数。同样153可以找到31和53也为质数,只要找到一个质数即满足神奇数。
神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。
比如:153,可以使用数字3和数字1组成13,13是质数,满足神奇数。同样153可以找到31和53也为质数,只要找到一个质数即满足神奇数。
输入描述:
输入为两个整数a和b,代表[a, b]区间 (1 ≤ a ≤ b ≤ 10000)。
输出描述:
输出为一个整数,表示区间内满足条件的整数个数
输入例子:
11 20
输出例子:
6
实现如下:比较繁琐
import java.util.Scanner; public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); int a=in.nextInt(); int b=0; if(in.hasNext()){ b=in.nextInt(); } //判断取两位后数字是否为质数 //(1)取两位数组合 int count=0; for (int value = a; value <= b; value++) { //从[a,b]区间取值 String s = String.valueOf(value); char[] c = s.toCharArray(); boolean is=false; boolean is1=false; for (int i = 0; i < c.length; i++) { if(is==true||is1==true){ break; } for (int j = i+1; j < c.length; j++) { is=false; //正方向 int iszhishu=(c[i]-'0')*10+(c[j]-'0'); //不能以0为先导 if(iszhishu/10!=0){ is=iszhishu(iszhishu); }else{ is=false; } //反方向 int iszhishu1=(c[j]-'0')*10+(c[i]-'0'); //不能以0为先导 if(iszhishu1/10!=0){ is1=iszhishu(iszhishu1); }else{ is1=false; } if(is==true||is1==true){ count++; break; } } } } System.out.println(count); } //判断是否为质数 private static boolean iszhishu(int iszhishu) { // TODO Auto-generated method stub boolean flag=true; for (int i = 2; i < iszhishu/2; i++) { if(iszhishu%i==0){ flag=false; break; } } return flag; } }