PAT (Advanced Level) 1015 Reversible Primes (20 分)
程序员文章站
2022-07-15 13:39:47
...
序:
这是一道进制+判断指数的题目。
题目概述:
给出一个十进制的数n,先判断其是否为质数;
然后给出进制d,将n在进制d下反转,得到一个新的十进制数,再判断其时候为质数;
若两个都是,输出yes;反之输出no
分析:
1.isprime函数的编写
2.n的反转:需要用到十进制转化d进制的手法,就是不停地取余和短除,然后反序将余数输出;但是如果我们需要反转的话,我们正序输出即可。这里涉及到的是小学奥数的进制转换hhhh
代码如下:
//什么是d进制的反转?
//n是十进制的数,十进制转d进制需要%、/操作,并且将%的结果反向输出
#include<bits/stdc++.h>
using namespace std;
//判断素数
bool isprime(int a)
{
if(a <= 1) return false;
for(int i = 2; i <= sqrt(a); i++)
{
if(a % i == 0) return false;
}
return true;
}
int main()
{
int n, d;
while(cin >> n >> d)
{
if(n < 0) break;
//先判断正序
if(!isprime(n))
{
cout << "No" << endl;
continue;
}
//用vector记录反序
vector<int> res;
while(n > 0)
{
res.push_back(n % d);
n /= d;
}
int reverse = 0;
for(int i = 0; i < res.size(); i++)
reverse = reverse * d + res[i];
//判断反转
if(!isprime(reverse))
{
cout << "No" << endl;
continue;
}
else
{
cout << "Yes" << endl;
continue;
}
}
return 0;
}
总结:
理解题意很重要。何谓反转?就是在d进制的表示下反转后,再将其按照十进制判断素数。
下一篇: 飞得更高:(二)可耻的沉默