首页 > 试题广场 >

回文素数

[编程题]回文素数
  • 热度指数:267 时间限制: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.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 回文素数
 * 如果一个整数只能被1和自己整除,就称这个数是素数。
 * 如果一个数正着反着都是一样,就称为这个数是回文数。例如:6, 66, 606, 6666
 * 如果一个数字既是素数也是回文数,就称这个数是回文素数
 * 牛牛现在给定一个区间[L, R],希望你能求出在这个区间内有多少个回文素数。
 * 输入描述:
 * 输入包括一行,一行中有两个整数(1 ≤ L ≤ R ≤ 1000)
 * 输出描述:
 * 输出一个整数,表示区间内回文素数个数。
 * 输入例子1:
 * 100 150
 * 输出例子1:
 * 2
 *
 * @author shijiacheng
 */
public class PalindromePrimeNumber {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int L = sc.nextInt();
        int R = sc.nextInt();
        List<Integer> primeNums = new ArrayList<>();
        // 找出所有素数
        for (int i = L; i <= R; i++) {
            boolean temp = false;
            for (int j = 2; j < i; j++) {
                if (i % j == 0) {
                    temp = true;
                }
            }
            if (i == 1){
                temp = true;
            }
            if (!temp) {
                primeNums.add(i);
            }
        }

        int count = 0;
        for (int i = 0; i < primeNums.size(); i++) {
            if (isPalindrome(primeNums.get(i))) {
                count++;
            }
        }
        System.out.println(count);
    }

    /**
     * 是否是回文数
     *
     * @param num
     * @return
     */
    public static boolean isPalindrome(int num) {
        if (num < 10) {
            return true;
        }
        int temp = num;
        StringBuilder sb = new StringBuilder();
        while (temp > 0) {
            sb.append(temp % 10);
            temp = temp / 10;
        }

        if (Integer.parseInt(sb.toString()) == num) {
            return true;
        }
        return false;
    }

}
发表于 2018-01-20 15:14:31 回复(0)
#include <iostream>
#include <cmath>
using namespace std;

bool is_primer(int val)
{
    if (val == 1)
        return false;
    for (int i = 2; i <= sqrt(val); ++i)
    {

        if (val % i == 0)
            return false;
    }
    return true;
}

bool is_textloop(int val)
{
    int m;
    int sum = 0;
    m = val;
    while (m)
    {
        sum = sum * 10 + m % 10;
        m /= 10;
    }

    if (sum == val)
        return true;
    else
        return false;
}

int main()
{
    int lowbound, upbound;
    int count = 0;
    cin >> lowbound >> upbound;
    for (int i = lowbound; i <= upbound; ++i)
        if (is_primer(i))
            if (is_textloop(i))
            {

                ++count;
            }
    cout << count << endl;
    return 0;
}
发表于 2019-10-18 20:58:06 回复(0)
importjava.util.*;

public class Main{

    public static void main(String[] args){
        Scanner input=new Scanner(System.in);
        int start=input.nextInt();
        int end=input.nextInt();
        int count=0;
        boolean isPrime,isHuiWen;
        for(int i=start;i<=end;i++){
            if(i<2)continue;//小于2的直接跳过(素数从2开始)
            isPrime=true;
            isHuiWen=false;
            String str1=i+"";
            StringBuilder str2 = newStringBuilder(str1);
            str2.reverse();
            int a = 0;//
            for(int k = 0; k < str1.length(); k++) {
                if(str1.charAt(k) != str2.charAt(k)) {//从头尾开始比较是否相同
                    break;
                } else{
                    a++;
                }
            }
            if(a == str1.length()) {//若字母相同个数与反转后字符串个数相同则为回文
                isHuiWen=true;
            }
            for(int j = 2; j <= Math.sqrt(i) ; j++){
                if(i%j == 0){
                    isPrime = false;
                    break;
                }
            }
            if(isPrime&&isHuiWen){
                count++;
            }
        }
        System.out.println(count);
    }
}
编辑于 2018-10-12 19:45:35 回复(0)
function HWs(strArr){
            let start = parseInt(strArr[0]);
            let end = parseInt(strArr[1]);
            let count;
        if(start == 1){
            count = -1
            }else{
                count = 0
            }
            let Arrt = [];
            for(let m=start;m<=end;m++){
                let newStr = "";
                let Str = m + newStr;
                let newArr = Str.split("").reverse().join("");
                if(Str === newArr){
                    Arrt.push(Number(Str));
                }
            }
             for(let g=0;g<Arrt.length;g++){
                    for(var k=2; k<=Arrt[g]-1;k++){
                    if(Arrt[g]%k ==0){
                        break;
                    }
                        
                }
                 if(k>Arrt[g]-1){
                        count++;
                    }
             }
        
        print(count);
}
    let lines = readline().split(" ");
    HWs(lines);

发表于 2020-03-21 22:31:53 回复(0)
请问各位,为什么不能用equals判断回文呢?这样写判断出来就是错的
 public static boolean isHuiwen(int num){
    
    if(num>=1 && num<=9){
      return true;
    }
    
    String str = num +"";
    StringBuilder sb = new StringBuilder(str);
    StringBuilder sb1 = sb.reverse();
    
    if(sb.equals(sb1)){
      return true;
    }else{
      return false;
    }
 }


发表于 2020-03-21 19:00:39 回复(0)
#include <iostream>
#include <cmath>
#include <iterator>

using namespace std;

bool is_primer(int val)
{
    int base = sqrt(val);
    int i = 2;
    for (; i <= base; ++i) {
        if (val % i == 0)
            return false;
    }
    return true;
}

bool is_textloop(int val)
{
    string str(to_string(val));
    string rstr(str.rbegin(), str.rend());
    if (str == rstr)
        return true;
    else
        return false;
}

int main()
{
    int lowbound, upbound;
    int count;
    cin >> lowbound >> upbound;
    for (int i = lowbound; i <= upbound; ++i)
        if (is_primer(i))
            if (is_textloop(i))
            {
                cout << i << endl;
                ++count;
            }
    cout << count;
}

能得出正确的结果但是不能通过牛客网的OJ
编辑于 2019-05-12 21:50:14 回复(0)