分数 20
全屏浏览题目
作者 CHEN, Yue
单位 浙江大学
A reversible prime in any number system is a prime whose "reverse" in that number system is also a prime. For example in the decimal system 73 is a reversible prime because its reverse 37 is also a prime.
Now given any two positive integers N (<105) and D (1<D≤10), you are supposed to tell if N is a reversible prime with radix D.
Input Specification:
The input file consists of several test cases. Each case occupies a line which contains two integers N and D. The input is finished by a negative N.
Output Specification:
For each test case, print in one line Yes
if N is a reversible prime with radix D, or No
if not.
Sample Input:
73 10
23 2
23 10
-2
Sample Output:
Yes
Yes
No
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
题目大意:若N为素数且N转成D进制后,再倒转,再转回10进制,该数还是素数则输出Yes,否则输出No,如当N为23,D为2,则23->10111->11101->29,29仍为素数,输出Yes。
代码+注释如下: #include<bits/stdc++.h> using namespace std; int exDecimal(int N,int D){ long long int sum=0,res=0;//sum用来保存转成D进制并倒转之后的值,res用来保存sum对应的十进制的值 int i=0; while(N!=0){//将10进制数转成D进制 int t=N%D; N/=D; sum+=t*pow(10,i); i++; } i=0; string temp=to_string(sum); reverse(temp.begin(),temp.end()); sum=stoll(temp);//将字符串转成数字 while(sum!=0){//将D进制转成10进制 int t=sum%10; sum/=10; res+=t*pow(D,i); i++; } return res; } bool isprime(int a){//判断是否为素数 if(a<=1)return false; for (int i = 2; i*i <=a ; ++i) { if(a%i==0)return false; } return true; } int main(){ int N,D; while(cin>>N){ if(N<0)break;//输入0代表输出结束 cin>>D; int N_reverse=exDecimal(N,D);//将N转成D进制后在倒转之后最后转回十进制的值 if(isprime(N)&&isprime(N_reverse))cout<<"Yes"<<endl;//N和倒转后的值都是素数,输出Yes else cout<<"No"<<endl;//否则输出No } return 0; }