題意:
每次輸入兩個正整數N,D直到N是負數停止輸入(N<1e5,1<D<=10),如果N是一個素數並且將N轉化為D進制后逆轉再轉化為十進制后依然是個素數的話輸出Yes,否則輸出No。
trick:
判斷轉化后的數是不是1,1不是素數,如果轉化后不是1說明轉化前也不會是1(第一個測試點錯誤原因)。
AAAAAccepted code:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 int n,d; 5 while(cin>>n){ 6 if(n<0) 7 break; 8 cin>>d; 9 int flag=0; 10 for(int i=2;i*i<=n;++i) 11 if(n%i==0) 12 flag=1; 13 int a[27]={0}; 14 int cnt=0; 15 while(n){ 16 a[++cnt]=n%d; 17 n/=d; 18 } 19 int x=0; 20 for(int i=1;i<=cnt;++i){ 21 x*=d; 22 x+=a[i]; 23 } 24 if(x==1) 25 flag=1; 26 for(int i=2;i*i<=x;++i) 27 if(x%i==0) 28 flag=1; 29 if(flag) 30 cout<<"No"<<"\n"; 31 else 32 cout<<"Yes"<<"\n"; 33 } 34 return 0; 35 }