题目链接:点击这里
题意:给定两个整数 N N N 和 D D D,如果 N N N 是一个质数,并且将 N N N 转化为 D D D 进制表示后,再进行反转,得到的新数字转化为十进制表示后如果也是一个质数,则称 N N N 在 D D D 进制系统中,是一个可逆质数。
例如, N = 23 , D = 2 N=23,D=2 N=23,D=2, 23 23 23 是质数,其二进制表示为 10111 10111 10111,反转后得到 11101 11101 11101,转化为十进制后为 29 29 29,这也是一个质数,所以 23 23 23 在二进制系统中是一个可逆质数。
现在,请你判断所给 N N N 在 D D D 进制系统中是否是一个可逆质数。
思路:如题。
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[20];
bool isprime(int x)
{
if(x < 2) return false;
for(int i = 2; i <= x / i; ++i)
if(x % i == 0)
return false;
return true;
}
int main()
{
int n, d;
while(cin >> n >> d)
{
if(n < 0) break;
if(!isprime(n))
{
puts("No");
continue;
}
int cnt = 0;
while(n)
{
a[cnt++] = n % d;
n /= d;
}
int res = 0;
for(int i = 0; i < cnt; i++)
res = res * d + a[i];
if(isprime(res)) puts("Yes");
else puts("No");
}
return 0;
}
微信公众号《算法竞赛求职》,致力于详细讲解竞赛和求职所涉及到的算法原理和模板。欢迎关注,一起交流进步!