题目大致意思就是,输入一个数n,输入一个进制radix,先将数n在radix进制下进行转换,将转换后的数进行反转,如果得到的这个数与原数n都是是素数则输出Yes,否则输出No。
废话不多说 直接上代码
#include<iostream>
#include<algorithm>
#include<math.h>
#include<queue>
using namespace std;
int transfer(int n, int radix)
{
queue<int> q;
while (n)
{
q.push(n % radix);
n /= radix;
}
int a[100],i=0;
while (!q.empty())
{
a[i++] = q.front();
q.pop();
}
int num = i,sum = 0,base =1;
for (i = 0; i < num; i++)
{
sum += a[num - 1 - i] * base;
base *= radix;
}
return sum;
}
bool judge(int n)
{
for (int i = 2; i <= sqrt(n); i++)
{
if (n % i == 0)
return 0;
}
if (n == 1||n==0)
return 0;
return 1;
}
int main()
{
string str;
int n;
while(cin>>str)
{
n = atoi(str.c_str());
if (n < 0) return 0;
int radix;
cin >> radix;
int num = transfer(n, radix);
if (judge(num)&&judge(n))
cout << "Yes" << endl;
else cout << "No" << endl;
}
}
这里运用到了数据结构中的队列,因为进行进制转换后用队列可以保证第一个入队的元素可以先出来,而第一个入队的元素正是反转后的最高位,直接存入数组即可,然后再根据所给的进制把数给还原,判断是否是质数即可。
这个题目我踩了两个坑:
第一个坑就是数据1,一开始在判断质数的时候把1给落了,导致错误
第二个坑就是必须输入的数与反转的数都要是质数才能输出Yes