#include<stdio.h> #include<cmath> #include<algorithm> #include<stack> using namespace std; int main() { int n,d; stack<int> s; //freopen("1015-in.txt","r",stdin); //freopen("1015-out.txt","w",stdout); while(true) { scanf("%d",&n); if(n<0) break; scanf("%d",&d); bool flag=false; for(int i=2;i<=sqrt(n*1.0);i++) { if(n%i==0) { flag=true; break; } } if(flag) { printf("No\n"); continue; } int data=n; while(true) { int mod = data%d; s.push(mod); data=data/d; if(data==0) break; } int exp=0; int sum=0; while(!s.empty()) { int num=s.top(); sum+=num*pow(d*1.0,exp); exp++; s.pop(); } //printf("%d\n",sum); for(int i=2;i<=sqrt(sum*1.0);i++) { if(sum%i==0) { flag=true; break; } } if(flag||sum<2) { printf("No\n"); } else { printf("Yes\n"); } } fclose(stdin); fclose(stdout); return 0; }
给定十进制n和d,n的d进制数反转之后转换十进制数m,判定n和m是否均为素数
一个special case
2 2
2转换成二进制后变成10,反转01,再变成十进制是1,显然不是素数了。不要理所当然就认为给的数就一定是素数。
PAT-1015 Reversible Primes (20)
原文:http://www.cnblogs.com/championlai/p/3980076.html