赞
踩
任意进制下的可逆素数是这样定义的:它自身是一个素数,当它转换为任意进制之后,把所有数字逆序,得到的新数字的值仍然是一个素数。比如,73在十进制下是一个素数,它在十进制下的逆37也是一个素数,那就称它是十进制下是一个可逆素数。
输入格式:
输入有多行,每行包括两个正整数,数N以及基R,其中N<100000, 1<D<=10, 遇到负数则退出。
输出格式:
对每一行输入,如果是可逆素数,则输出“Yes”,否则输出“No”
输入样例:
在这里给出一组输入。例如:
73 10
23 2
23 10
-2
输出样例:
在这里给出相应的输出。例如:
Yes
Yes
No
样例说明:23的二进制是10111,其逆为11101,对应的十进制数是29,所以是可逆素数。
#include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <iostream> using namespace std; int N,D; int a[100005]; int f() { int sum = 0; int i = 1; int t2 = 1; while(N) { a[i++] = N%D; N /= D; } for(int j = i-1;j>=1;j--) { sum += a[j]*t2; t2 *= D; } return sum; } bool isprime(int t1) { if(t1==1) return false; for(int i = 2;i*i<=t1;i++) { if(t1%i==0) return false; } return true; } int main() { //freopen("test.in","r",stdin); //freopen("test.out","w",stdout); int t; while(scanf("%d",&N)==1) { if(N>0) scanf("%d",&D); else break; t = f(); if(isprime(t)) cout <<"Yes"<<endl; else cout <<"No"<<endl; } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。