思路
判断原数和“取反”后数是否为素数
1.用vector存储“取反”时用到的数字
#include <cstdio>
#include <cmath>
#include <vector>
using namespace std;
bool is_prime(int n) {
if(n <= 1) return false;
int sqr = int(sqrt(n * 1.0));
for(int i = 2; i <= sqr; i++) {
if(n % i == 0)
return false;
}
return true;
}
//取反,注意基数
int reverse(int n,int r)
{
vector<int> num;
int result = 0;
do {
num.push_back(n%r);
n /= r;
}while (n != 0);
for (int i = num.size()-1; i >= 0 ; --i) {
result += num[num.size()-i-1]*pow(r,i);//回文后算出新的数进行比较
}
return result;
}
int main()
{
int N,D;//原数,基数
while(scanf("%d %d",&N,&D) ,N>0)
{
if(is_prime(N)&&is_prime(reverse(N,D))) printf("Yes
");
else printf("No
");
}
}
解法二
#include <cstdio>
#include <cmath>
#include <vector>
using namespace std;
vector<int> num;
bool reverse(int n,int r)
{
int result = 0;
do {
num.push_back(n%r);
n /= r;
}while (n != 0);
//判断是否回文
for (int i = 0; i < num.size()/2 ; ++i) {
if(num[i] != num[num.size()-1-i]) return false;
}
return true;
}
int main()
{
int N,b;
scanf("%d %d",&N,&b);
if(reverse(N,b)) printf("Yes
");
else printf("No
");
for (int i = num.size()-1; i >=0; --i)
{
printf("%d",num[i]);
if(i != 0) printf(" ");
}
}