这一题的题目意思要理解清楚,例如给一个数11,进制为2。那么11是质数,在2进制下,11为1011,反转后为1101,是13,也是质数,所以应该输出Yes.
有一个坑,根据定义,1不是质数。
#include <cstdio>
#include <math.h>
int isPrime(int num)
{
if (num == 1)
return 0;
for (int i = 2; i < num; i++)
{
if (num % i == 0)
return 0;
}
return 1;
}
int reverse(int num, int radix)
{
int sum = 0;
while (num != 0)
{
int rest = num % radix;
num /= radix;
sum = sum * radix + rest;
}
return sum;
}
int main()
{
int num = 0;
int inputs[100000];
int radixs[100000];
for (int i = 0; i < 100000; i++)
{
int input;
int radix;
scanf("%d", &input);
if (input < 0)
break;
scanf("%d", &radix);
inputs[num] = input;
radixs[num++] = radix;
}
for (int i = 0; i < num; i++)
{
int numReserve = reverse(inputs[i], radixs[i]);
if (isPrime(inputs[i]) && isPrime(numReserve))
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}