PAT 甲级 1015 Reversible Primes (20 分)
这个20分的题居然困了我好久,主要是没什么进制互换和倒序的经验,我自作聪明用了int来存储任意进制的数,到最后才发现二进制数或者低进制数可能会超出范围导致最后一个测试点过不了。顺便吐槽一句c++的字符数组、字符指针和字符串是真难用。。。
代码:
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
bool isPrime(int n){
if(n<2) return 0;
int sqr=(int)sqrt(n*1.0);
for(int i=2;i<=sqr;i++)
if(n%i==0) return false;
return true;
}
int reverse(int n,int d){
vector<int> v;
while(n){
v.push_back(n%d);
n/=d;
}
int m=0,s=v.size();
for(int i=0;i<s;i++)
m+=v[s-1-i]*pow(d,i);
return m;
}
int main(){
int n,d;
while(scanf("%d",&n)){
if(n<0) break;
scanf("%d",&d);
isPrime(n)&&isPrime(reverse(n,d))?printf("Yes\n"):printf("No\n");
}
return 0;
}