回文素数
回文素数
http://www.nowcoder.com/questionTerminal/4802faa9afb54e458b93ed372e180f5c
回文素数
题目难度:中等
知识点:数学逻辑,数组
解题思路:首先判断数字是否为回文,然后判断数字是否为素数,若都是,则为回文素数。下面具体介绍回文和素数的判断方法。
方法一
回文的判断方法:对数字取余得到个位数字,然后对该数字除以十后取余,得到十位上的数字,随后继续除以十后取余获得百位上的数字,直至数字为0时停止。将各个位上的倒着排列组成新的数字,判断新数字是否与原来的数字相等,若相等,则为回文。
素数的判断方法:若待判断数字为n,由2至n-1共进行n-2次循环,判断该数字是否能被n整除,若能则不是素数,若都不能,则是素数。
import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)); String[] s=bf.readLine().split(" "); int l=Integer.parseInt(s[0]); int r=Integer.parseInt(s[1]); int count=0; //循环判断[L, R]区间内的每一个数字是否为即为回文又为素数 for(int i=l;i<=r;i++) { if(isPalindrome(i)&&isprime(i)) count++; else continue; } System.out.println(count); } //判断一个数是否为素数 public static boolean isprime(int n) { if(n==1) { return false; } for(int i=2;i<n;i++){ if(n%i==0) { return false; } } return true; } //判断一个数是否为回文 public static boolean isPalindrome(int n) { int k=n;int num=0; while(k!=0) { num=num*10+k%10; k=k/10; } return num==n; } }
方法二
回文的判断方法:将数字转换为字符串,用两个下标start和end分别标记字符串的第一个字符和最后一个字符,使字符串中字符分别从由前往后和从由后往前访问,若前后访问过程中字符均相等,则为回文,否则不是,循环结束条件为start<end。
素数的判断方法:如果一个数不是素数,那它就可以写成是两个数字的乘积,而其中较小的一个数字必然小于等于该数的平方根,因此,在循环判断中,只判断2到该数的平方根之间的数能否被整除即可。
import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)); String[] s=bf.readLine().split(" "); int l=Integer.parseInt(s[0]); int r=Integer.parseInt(s[1]); int count=0; //循环判断[L, R]区间内的每一个数字是否为即为回文又为素数 for(int i=l;i<=r;i++) { if(isPalindrome(i)&&isprime(i)) count++; else continue; } System.out.println(count); } //判断一个数是否为素数 public static boolean isprime(int n) { if(n==1) { return false; } if (n==2){ return true; } for(int i=2;i<Math.sqrt(n)+1;i++){ if(n%i==0) { return false; } } return true; } //判断一个数是否为回文 public static boolean isPalindrome(int n){ String s=String.valueOf(n); int start=0,end=s.length()-1; while(start<end){ if(s.charAt(start)!=s.charAt(end)){ return false; } start++; end--; } return true; } }