注意1不为质数,2为质数这些特殊情况
其中测试点2为值为2的测试
#include <bits/stdc++.h>
using namespace std;
int prime(int num)
{
if (num == 1)
return -1;
for (int i = 2; i <= sqrt(num); i++)
{
if (num % i == 0)
return -1;
}
return 1;
}
void itoa_rev(int n, char *str, int d)
{
int temp = n;
int pos = 0;
while (temp != 0)
{
str[pos++] = temp % d + '0';
temp /= d;
}
str[pos] = '\0';
}
int main()
{
int n, d;
int first = 1;
while (cin >> n)
{
if (n < 0)
break;
cin >> d;
if (prime(n) == 1)
{
char str[100];
itoa_rev(n, str, d);
char *stop;
int r = strtol(str, &stop, d);
if (prime(r) == 1)
{
if (first == 1)
cout << "Yes", first = 0;
else
cout << endl
<< "Yes";
}
else
{
if (first == 1)
cout << "No", first = 0;
else
cout << endl
<< "No";
}
}
else
{
if (first == 1)
cout << "No", first = 0;
else
cout << endl
<< "No";
}
}
}