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; }