PAT甲级1015
很简单的一道题,只需要注意0,1,2的问题就可以了,读入数据由于是读到负数结束所以可以采用while循环,两个进制转换函数,一个判断是否是素数的函数就可以解决问题,范围int类型足够。
但是,注意细节!!!!!!!!!!!!!!尤其放在考试的时候!!!!!!!!我就是少了一个等号,而没有读入0,而找了很久的bug。。。。。。。。。。
代码没有借鉴的意义,很繁琐,待我第二遍刷题库时来更新。
#include<iostream>
#include<math.h>
using namespace std;
class ra{
public:
int a;
int b;
};
int convertor(int n,int r,int s[]){
int di=0;
while(n>0){
s[di]=n%r;
n=n/r;
di++;
}
return di;
}
int conver10(int r,int s[],int num){
int sum=0;
for(int i=0;i<num;i++){
sum+=s[i]*pow(r,(num-1-i));
}
return sum;
}
int isprime(int n){
if(n==0 || n==1 ){
return 0;
}else if(n==2){
return 1;
}else{
int x=sqrt(n)+1;
int lg=0;
for(int i=2;i<x;i++){
if(n%i==0){
lg=1;
break;
}
}
if(lg==1){
return 0;
}else{
return 1;
}
}
}
int main(){
ra R[90000];
int m[90000];
int n1,rad;
cin>>n1;
int num=0;
while(n1>=0){
R[num].a=n1;
cin>>rad;
R[num].b=rad;
num++;
cin>>n1;
}
int y,i;
for(i=0;i<num-1;i++){
y=0;
if(isprime(R[i].a)){
y=convertor(R[i].a,R[i].b,m);
if(isprime(conver10(R[i].b,m,y))){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
}else{
cout<<"No"<<endl;
}
}
if(isprime(R[i].a) && num!=0){
y=0;
y=convertor(R[i].a,R[i].b,m);
if(isprime(conver10(R[i].b,m,y))){
cout<<"Yes";
}else{
cout<<"No";
}
}else if(!isprime(R[i].a) && num!=0){
cout<<"No";
}
}