按指定进制转换数字顺序后,在计算十进制的值,是否仍为质数。
拆分算法一
//将10进制数x,按d进制逆转
int Reverse(int x, int d)
{
int ans = 0;
do{
ans = ans * d + x % d;
x /= d;
}while(x != 0);
return ans;
}
拆分算法二
借助队列实现,d为进制。
queue<int>q;
while(n!=0)
{
q.push(n%d);
n=n/d;
}
int reverse=0;
while(!q.empty())
{
reverse=reverse*d;
reverse=reverse+q.front();
q.pop();
}
本题实现
// 数字的逆转与进制转换的结合
//
//
//
#include <stdio.h>
#include <math.h>
//将10进制数x,按d进制逆转
int Reverse(int x, int d)
{
int ans = 0;
do{
ans = ans * d + x % d;
x /= d;
}while(x != 0);
return ans;
}
bool isPrime(int x)
{
if(x <= 1)
{
return false;
}
if(x == 2)
{
return true;
}
int y = (int)sqrt(x);
for(; x%y != 0; y--)
;
return y == 1;
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt", "r", stdin);
// freopen("E:\\out.txt", "w", stdout);
#endif
int n, d;
while(scanf("%d", &n) && n>=0)
{
scanf("%d", &d);
if( isPrime(n) && isPrime(Reverse(n, d)) )
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}