题目
生词生字
- Reversible Primes
可逆素数
思路
首先具备两个函数,第一个是判断素数,第二个是将一个十进制数转换成给定的进制后逆转,再转换成十进制
然后就对每行进行判断
坑点
注意输入的数字0和1不是素数,并且判断转换后的数如果是0和1也不是素数
代码
#include <iostream>
#include<string.h>
#include<algorithm>
#include<stack>
using namespace std;
#define nmax 20 //一个用作示例的小顺序表的最大长度
stack<int> s;
bool isPrime(int num)
{
int sqr = sqrt(num);
for (int i = 2; i <= sqr; ++i)
{
if (num % i == 0)
return false;
}
return true;
}
int reverse_num(int num,int radix)
{
while (num > 0)
{
s.push(num % radix);
num /= radix;
}
int k = 0,sum = 0;
while (!s.empty())
{
sum += s.top()*pow(radix,k);
++k;
s.pop();
}
return sum;
}
int main()
{
int num, radix;
do {
cin >> num;
if (num < 0)
return 0;
cin >> radix;
if (num == 1 || num == 0 !isPrime(num))
{
cout << "No" << endl;
continue;
}
int newnum = reverse_num(num, radix);
if (newnum == 1 || newnum == 0 && !isPrime(newnum))
{
cout << "No" << endl;
continue;
}
cout << "Yes" << endl;
} while (true);
}