1015 Reversible Primes (20 分)

reversible prime in any number system is a prime whose "reverse" in that number system is also a prime. For example in the decimal system 73 is a reversible prime because its reverse 37 is also a prime.

Now given any two positive integers N (<10​5​​) and D (1<D≤10), you are supposed to tell if N is a reversible prime with radix D.

Input Specification:

The input file consists of several test cases. Each case occupies a line which contains two integers N and D. The input is finished by a negative N.

Output Specification:

For each test case, print in one line Yes if N is a reversible prime with radix D, or No if not.

Sample Input:

73 10
23 2
23 10
-2

Sample Output:

Yes
Yes
No

題意: 給兩個數n和d,判斷n是不是素數,將n轉化成d進制的數字n1,然後逆轉n1,將n1轉化成十進制的數字,判斷是不是素數。

#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int prime[666666];
int tot=0;
int check[100005];
void init(){
	check[1]=1;
	check[0]=1;
	for(int i=2;i<=100000;i++){
		if(!check[i]) prime[tot++]=i;
		for(int j=0;j<tot&&prime[j]*i<=100000;j++){
			check[prime[j]*i]=1;
			if(i%prime[j]==0) break;
		}
	}
} 
bool solve(int n,int d){
	int flag=1;
	if(check[n]) flag=0;
	string s="";
	while(n){
		s+=(n%d+'0');
		n/=d;
	}
	int re=0;
	for(int i=0;i<s.size();i++){
		re=re*d+(s[i]-'0');
	}
	if(check[re]) flag=0;
	if(flag==1) return true;
	else return false;
}
int main(){
	int n,d;
	init();
	while(cin>>n){
		if(n<0) break;
		else cin>>d;
		if(solve(n,d)) cout<<"Yes\n";
		else cout<<"No\n";
	}
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章