1015. Reversible Primes (20)
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 -2Sample Output:
Yes Yes No
解题思路:
所谓的可反转的素数就是那些在反转之后依旧是素数的数,比如在10进制下,73反过来是37依旧是一个素数,一个素数无论在什么进制下也依旧是素数,但是在不同进制下,它反转得到的数可能不一样,给定一个数字的十进制表示和一个进制数k,问你在在k进制下,该数是否是可反转的。
先判断是不是素数,是素数就进行进制转化,转化进制后再求出反转后的值,然后再判断是否是素数。
表示这是一道做过的题,今天心血来潮打算把牛客网上的PAT刷完,结果居然WA了一发,因为我忘记了考虑1不是素数。哎。
/*****************************************************************
> File Name: tmp.cpp
> Author: Uncle_Sugar
> Mail: uncle_sugar@qq.com
> Created Time: 2016年03月21日 星期一 18时42分55秒
*****************************************************************/
# include <cstdio>
# include <cstring>
# include <cmath>
# include <cstdlib>
# include <climits>
# include <iostream>
# include <iomanip>
# include <set>
# include <map>
# include <vector>
# include <stack>
# include <queue>
# include <algorithm>
using namespace std;
# ifndef ONLINE_JUDGE
struct DesktopIO{
DesktopIO(){
freopen("//home//unclesugar//in.txt","r",stdin);
freopen("//home//unclesugar//out.txt","w",stdout);
}
}DIO;
# endif
const int debug = 0;
const int size = 5000 + 10;
const int INF = INT_MAX>>1;
typedef long long ll;
bool isprimer(int x){
if (x<2)
return false;
for (int i=2;i*i<x;i++)
if (x%i==0)
return false;
return true;
}
int Array[size],len;
int main()
{
std::ios::sync_with_stdio(false);cin.tie(0);
int i,j,k;
int n,d;
while (cin >> n){
if (n<0) break;
cin >> d;
if (!isprimer(n))
cout << "No\n";
else {
len = 0;
while (n>0){
Array[len++] = n%d;
n /= d;
}
int sum = 0;
for (i=0;i<len;i++){
sum = sum*d + Array[i];
}
if (isprimer(sum))
cout << "Yes\n";
else
cout << "No\n";
}
}
return 0;
}