PTA跳转:原题链接
题是简单题,难点在于读题。
题目大意:判断一个数和它转换成N进制后进行翻转再转换成10进制的数是否都是素数,如果是,输出“Yes”,否则输出“No”。
例如“23 2”,23是素数,23转换成2进制后是10111,翻转后是11101,转换成10进制后是29,29也是素数,所以输出“Yes”。
#include <iostream>
#include <math.h>
using namespace std;
int isPrime(int n) //判断素数
{
if(n < 2)
return 0; //不是素数
for(int i = 2; i <= sqrt(n); i++)
{
if(n % i == 0)
{
return 0; //不是素数
}
}
return 1; //是素数
}
//完成进制转换,翻转,再转换成10进制
int changeRadix_Reverse(int num, int n) //参数分别是要转化的数和转化的进制
{
int c[20], count = 0, b = 1, ans = 0;
for(int i = 0; i < 20; i++)
c[i] = n; //例如8进制中没有8
while(b != 0)
{
b = num / n;
c[count] = num % n;
num = b;
count++;
}
for(int i = 0; i < count; i++)
{
ans = ans * n + c[i]; //将进制转换后的数直接翻转,再转换成10进制返回
}
return ans;
}
int main()
{
int N, D; //要转化的数,转化的进制
while(true)
{
cin >> N;
if(N < 0) break;
cin >> D;
if(isPrime(N) && isPrime(changeRadix_Reverse(N, D))) //如果N转化为D进制之后的数是素数
cout << "Yes" << endl;
else
cout << "No" << endl;
}
return 0;
}
氷鸢鸢鸢
2020.7.14