1015 Reversible Primes

代码

#include <iostream>
#include <cstdio>
#include <string> 
#include <cmath>
using namespace std;
//将一个十进制的数转化成指定进制的数
//将转化后的数颠倒
//将颠倒后的数转化回十进制的数
//判断是不是素数
string tentoany(int a,int radix); 
long long anytoten(string a,int radix);
string rev_diy(string a);
bool is_prime(int a);
string tentoany(int a,int radix){//将整型的十进制的数,转化为任意进制的字符串型的数 
	int tmp=a;
	string s;
	s="";
	while(tmp!=0){
		s+=('0'+(tmp%radix));
		tmp=tmp/radix;
	} 
	s=rev_diy(s);
	return s;
} 
long long anytoten(string a,int radix){//任意进制的字符串形式的数,转成十进制的长整型 
	long long cnt=0;
	for(int i=0;a[i]!=NULL;i++){
		cnt+=((a[a.size()-i-1]-'0')*(pow(radix,i)));
	}
	return cnt;
}
string rev_diy(string a){//将一个字符串形式的数进行颠倒 
	string b;
	b=a;
	for(int i=0;a[i]!=NULL;i++){
		b[i]=a[a.size()-i-1];
	}
	return b;
} 
bool is_prime(int a){//这个函数用来判断是不是素数,返回1即是素数 
	if(a<2){
		return 0;
	}
	else if(a==2){
		return 1;
	}
	if(a%2==0&&a!=2){
		return 0;
	}
	for(int i=3;i*i<=a;i+=2){
		if(a%i==0){
			return 0;
		}
	}
	return 1;
} 
int main()
{
	int a,b;
	while(true){
		cin>>a;
		if(a<0){
			break;
		}
		else{
			cin>>b;
			if(is_prime(a)==false){
				cout<<"No"<<endl;
			}
			else{
				if(is_prime(anytoten(rev_diy(tentoany(a,b)),b))==true){
					cout<<"Yes"<<endl;
				}
				else{
					cout<<"No"<<endl;
				}
			}
		}
	}
	return 0;
}
posted @ 2022-07-20 15:46  qwasdasd  阅读(27)  评论(0)    收藏  举报