列表

详情


NC22910. 回文质数

描述

因为151即是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 号是回文质数。
写一个程序来找出范围[a,b](5 <= a < b <= 100,000,000)间的所有回文质数;

输入描述

第 1 行: 二个整数 a 和 b .

输出描述

输出一个回文质数的列表,一行一个。

示例1

输入:

5 500

输出:

5
7
11
101
131
151
181
191
313
353
373
383

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Java 解法, 执行用时: 687ms, 内存消耗: 16244K, 提交时间: 2021-07-27 15:43:18

import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		int b = sc.nextInt();
		for (int i = a; i <= b; i++) {
            if(i > 9989899) break;
			boolean flag = true;
			String temp = i+"";
			for (int j = 0; j < temp.length()/2; j++) {
				if(temp.charAt(j) != temp.charAt(temp.length()-1-j)) {
					flag = false;
				}
			}
			if(flag) {
				for (int j = 2; j <= Math.sqrt(i); j++) {
					if(i%j==0) {
						flag = false;
					}
				}
				if (flag) {
					System.out.println(i);
				}
			}
		}
	}
}

C++(g++ 7.5.0) 解法, 执行用时: 166ms, 内存消耗: 432K, 提交时间: 2022-12-06 19:52:10

#include<bits/stdc++.h>
using namespace std;
bool is_prime(int x){
    for(int i=2;i*i<=x;i++){
        if(x%i==0){
            return false;
        }
    }
    return true;
}
bool fun(int x){
    int s=0,t=x;
    while(t){
        s=s*10+t%10;
        t/=10;
    }
    return s==x;
}
int main(){
    int a,b;
    cin>>a>>b;
    b=min(b,9989899);
    for(int i=a;i<=b;i++){
        if(fun(i)&&is_prime(i)){
            cout<<i<<endl;
        }
    }
    return 0;
}

C 解法, 执行用时: 56ms, 内存消耗: 388K, 提交时间: 2021-07-25 15:51:02

#include<stdio.h>
int a[10]={0};
int p(int s){
	int i=0,j;
	while(s>0){
		a[i]=s%10;
		s/=10;
		i++;
	}
	for(j=0,i--;2*j<=i;j++){
		if(a[j]!=a[i-j])return 0;
	}
		return 1;
}
int f(int x){
	int i;
	for(i=2;i*i<=x;i++){
		if(x%i==0)return 0;
	}return 1;
}
int main(){
	int a,b,j,i;
	scanf("%d %d",&a,&b);
	if(b>9989899)b=9989899;
	if(a%2==0)a++;
	for(j=a;j<=b;j+=2){
		if(p(j))if(f(j))printf("%d\n",j);
	}
	return 0;
}

C++(clang++ 11.0.1) 解法, 执行用时: 886ms, 内存消耗: 448K, 提交时间: 2023-01-06 14:58:35

#include<bits/stdc++.h>
using namespace std;
#include<math.h>
bool isprime(int x){
	if(x==1) return false;
	int i;
	for(i=2;i<=sqrt(x);++i)
    if(x%i==0) return false;
    return true;
}
int main(){
	int m,n;
	scanf("%d%d",&m,&n);
	int i,a,b;
	for(i=m;i<=n;++i){
		a=i;
		b=0;
		while(a>0){
			b=a%10+b*10;
			a=a/10;
		} 
		if(b==i)
	        if(isprime(i)) 
			    printf("%d\n",i);
	}
	return 0;
}	

上一题