思路
-
输入一个数,先判断他是不是质数
-
反转数,再判断是不是质数
知识点
- 判断质数:(注意有等于号,我写的时候就给落下了)
bool is_prime(int n)
{
if (n == 1) return false;
for (int i = 2; i <= n / i; i ++ )
if (n % i == 0) return false;
return true;
}
- 将一个数倒转(好聪明的小技巧)
LL res = 0;
while(n)
{
res = res * r + n % r;
n /= r;
}
y总优雅代码
#include<iostream>
#include<algorithm>
using namespace std;
bool is_prime(int n)
{
if (n == 1) return false;
for (int i = 2; i <= n / i; i ++ )
if (n % i == 0) return false;
return true;
}
bool check(int n, int r)
{
if (!is_prime(n)) return false;
long long res = 0;
while(n)
{
res = res * r + n % r;
n /= r;
}
if (is_prime(res)) return true;
else return false;
}
int main()
{
int n, r;
while(cin >> n >> r, n >= 1)
{
if (check(n, r)) puts("Yes");
else puts("No");
}
return 0;
}
y总的代码确实优雅
是吧hh超级优雅的
res是long long型,bool prime的参数应该也是long long型才对吧?
res取int也是可以的