回文素数

题目难度:中等

知识点:数学逻辑,数组

解题思路:首先判断数字是否为回文,然后判断数字是否为素数,若都是,则为回文素数。下面具体介绍回文和素数的判断方法。

方法一

回文的判断方法:对数字取余得到个位数字,然后对该数字除以十后取余,得到十位上的数字,随后继续除以十后取余获得百位上的数字,直至数字为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;
    }
}