首页 > 试题广场 >

回文素数

[编程题]回文素数
  • 热度指数:14111 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
如果一个整数只能被1和自己整除,就称这个数是素数。
如果一个数正着反着都是一样,就称为这个数是回文数。例如:6, 66, 606, 6666
如果一个数字既是素数也是回文数,就称这个数是回文素数
牛牛现在给定一个区间[L, R],希望你能求出在这个区间内有多少个回文素数。

输入描述:
输入包括一行,一行中有两个整数(1 ≤ L ≤ R ≤ 1000)


输出描述:
输出一个整数,表示区间内回文素数个数。
示例1

输入

100 150

输出

2
入门算法,判断回文和判断素数的算法
import java.util.Scanner;

/**
 * @Author: coderjjp
 * @Date: 2020-05-14 9:02
 * @Description: 回文素数
 * @version: 1.0
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int L = sc.nextInt(), R = sc.nextInt();
        int ans = 0;
        for (int i = L; i <= R; i++)
            if (isOK1(i) && isOK2(i))
                ans++;
        System.out.println(ans);
    }

    private static boolean isOK2(int i) {//判断素数
        if (i == 1)
            return false;
        for (int j = 2; j*j <= i; j++)
            if (i % j == 0)
                return false;
        return true;
    }

    private static boolean isOK1(int i) {//判断回文
        int temp = i;
        int j = 0;
        while (temp > 0){
            j = j * 10 + temp % 10;
            temp /= 10;
        }
        return i == j;
    }
}


发表于 2020-05-14 09:12:26 回复(0)
import java.util.Scanner;

public class Question18 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int l = sc.nextInt();
        int r = sc.nextInt();
        int count =0;
        for(int i=l;i<=r;i++){
            if(i==1){
                count--;
            }
            if(sushu(i)&&huiwenshu(i)){
                count++;
            }
        }
        System.out.println(count);
    }


    public static boolean sushu(int i){
        for(int j =2 ;j<i;j++){
            if(i%j ==0){
                return false;
            }
        }
        return true;
    }
    public static boolean huiwenshu(int i){
        char[] arr = (i+"").toCharArray();
        int[] arr1 =new int[arr.length];
        for(int k = 0;k<arr.length;k++){
            arr1[k] =(int)(arr[k]);
        }
        int left =0;
        int right =arr.length-1;
        while(left<=right){
            if(arr1[left] == arr1[right]){
                left++;
                right--;
            }else {
                return false;
            }
        }
        return  true;

    }
}


编辑于 2019-08-21 12:37:18 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            int L = sc.nextInt();
            int R = sc.nextInt();
            int result = numberOfPrimePalindromes(L,R);
            System.out.println(result);
        }    
    }
    private static int numberOfPrimePalindromes(int l, int r) {
        int num = 0;
        for(int i = l; i <= r; i++) {
            if(isPlalindrome(i) && isPrimeNumber(i)) {
                num++;
            }
            System.out.println(i+": "+isPrimeNumber(i)+" "+isPlalindrome(i));
        }
        return num;
    }
    private static boolean isPrimeNumber(int i) {
        String stri = Integer.toString(i);
        for(int j = 0; j < stri.length() / 2; j++) {
            if(stri.charAt(j) != stri.charAt(stri.length() - 1 - j)){
                return false;
            }
        }
        return true;
    }
    private static boolean isPlalindrome(int i) {
        if(i == 1) {
            return false;
        }
        for(int j = 2; j < i; j++) {
            if(i % j == 0) {
                return false;
            }
        }
        return true;
    }    
}
发表于 2019-04-16 20:53:54 回复(0)
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList arr=new ArrayList();
        int m = sc.nextInt();
        int n = sc.nextInt();
        int count = 0;
    
        for (int i = m; i <= n; i++) {
            int b = 2;
            while (b < i) {
                if (i % b == 0) {
                    break;
                }
                b++;
            }
            if (i == b) {
                arr.add(i);
            }
        }
        for (int j = 0; j< arr.size(); j++) {
            int rs = 0;
            int i=(int) arr.get(j);
            while (i > 0) {
                rs *= 10;
                rs += i % 10;
                i /= 10;
            }
            if (rs ==(int) arr.get(j)) {
                count++;
            }
        }
    
    
                System.out.println(count);

    }
}

发表于 2019-03-24 21:03:19 回复(0)
public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    int L = scan.nextInt();
    int R = scan.nextInt();
    int count = 0;
    for(int i=L; i<=R; i++){
        if(isPalindromeAndPrime(i)){
            count++;
        }
    }
    System.out.println(count);

}

public static boolean isPalindromeAndPrime(int a){
    if(a == 1)//1不是质数
        return false;
    for(int i=2; i<a; i++){//判断是否为质数
        if(a%i == 0){
            return false;
        }
    }
    String s = a + "";
    int i = 0, j = s.length()-1;
    while(i < j){//判断是否为回文数
        if(s.charAt(i) != s.charAt(j)){
            return false;
        }
        i++;
        j--;
    }
    return true;
}
编辑于 2019-03-01 10:52:57 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        try(Scanner in = new Scanner(System.in)){
            System.out.println(helper(in.nextInt(),in.nextInt()));
        }
    }
    public static int helper(int l,int r){
        int count = 0;
        if(l == 1) l++;//1不是素数
        while(l <= r){
            if(isHuiWen(l) && isSu(l)) count++;
            l++;
        }
        return count;
    }
    public static boolean isSu(int num){
        int i = 2;
        while(i * i <= num){
            int j = num / i;
            if(j * i  == num) return false;
            i++;
        }
        return true;
    }
    public static boolean isHuiWen(int num){
        char[] cs = Integer.toString(num).toCharArray();
        int i = 0,j = cs.length - 1;
        while(i <= j){
            if(cs[i] != cs[j]) return false;
            i++;
            j--;
        }
        return true;
    }
}


发表于 2019-01-16 11:33:03 回复(0)