游客 Signup | Login
中文 | En

2240 - 素数回文

小王对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在小王想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 <= a < b <= 100,000,000);

Input

输入a和b(5 <= a < b <= 100,000,000)

Output

按从小到大输出a,b之间所有满足条件的素数回文数

Examples

Input

5 500

Output

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

Solution C

#include <stdio.h>
#include <string.h>
#include <math.h>
int isprime(long long int n){
	if(n<2)
	return 0;
	else{
		for(long long int i=2;i*i<=n;i++){
			if(n%i==0)
			return 0;		
		}
			return 1;		
	}	
}

int ishuiwen(long long int n){
	long long int a[50]={0},i,j,bp=0;
	while(n){
		a[bp++]=n%10;
		n/=10;
	}
	for(i=0,j=bp-1;i<j;i++,j--)
	if(a[i]!=a[j])
	return 0;
	return 1;	
}

int hwlen(long long int n){
	long long int a[50]={0},i,j,bp=0;
	while(n){
		a[bp++]=n%10;
		n/=10;
	}
	return bp;
}
int main(){
	long long int i,j,l,r;
	scanf("%lld%lld",&l,&r);
	for(i=l;i<=r;i++){
		if(i%2==0&&i!=2)
		continue;
		if(i%5==0&&i!=5)
		continue;
		if(hwlen(i)%2==0&&i!=11)
		continue;
		if(!ishuiwen(i))
		continue;	
		if(isprime(i)==1)
			printf("%lld\n",i);	
	}	
}

Solution C++

#include <bits/stdc++.h>
using namespace std;


bool isP(int x) {
	if (x < 2) return false;
	for (long long i = 2; i * i <= x; i ++) {
		if (x % i == 0) return false;
	}
	return true;
}

int main() {
	int a, b;
	vector <int> v;
	
	cin >> a >> b;
	for (int i = 1; i <= 9999; i ++) {
		int j = i, base = 1, t = 0;
		while (j) {
			base *= 10;
			t = t * 10 + j % 10;
			j /= 10;
		}
		
		int num1 = i * base + t;
		int num2 = i * (base / 10) + t % (base / 10);
		if (num1 >= a && num1 <= b && isP(num1)) v.push_back(num1);
		if (num2 >= a && num2 <= b && isP(num2)) v.push_back(num2);
	}
	
	sort(v.begin(), v.end());
	for (int i = 0; i < v.size(); i ++) cout << v[i] << endl;
		
	return 0;
}


/*
1234
12340000 + 4321
123000 + 321
*/
Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题