PAT 1015 Reversible Primes (20分)

题目链接:点击这里

题意:给定两个整数 N N N D D D,如果 N N N 是一个质数,并且将 N N N 转化为 D D D 进制表示后,再进行反转,得到的新数字转化为十进制表示后如果也是一个质数,则称 N N N D D D 进制系统中,是一个可逆质数。

例如, N = 23 , D = 2 N=23,D=2 N=23,D=2 23 23 23 是质数,其二进制表示为 10111 10111 10111,反转后得到 11101 11101 11101,转化为十进制后为 29 29 29,这也是一个质数,所以 23 23 23 在二进制系统中是一个可逆质数。

现在,请你判断所给 N N N D D D 进制系统中是否是一个可逆质数。

思路:如题。

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

int a[20];

bool isprime(int x)
{
    
    
    if(x < 2)   return false;
    for(int i = 2; i <= x / i; ++i)
        if(x % i == 0)
            return false;
    return true;
}

int main()
{
    
    
    int n, d;
    while(cin >> n >> d)
    {
    
    
        if(n < 0)   break;
        
        if(!isprime(n))
        {
    
    
            puts("No");
            continue;
        }
        
        int cnt = 0;
        while(n)
        {
    
    
            a[cnt++] = n % d;
            n /= d;
        }
        
        int res = 0;
        for(int i = 0; i < cnt; i++)
            res = res * d + a[i];
        
        if(isprime(res))    puts("Yes");
        else    puts("No");
    }
    
    return 0;
}

微信公众号《算法竞赛求职》,致力于详细讲解竞赛和求职所涉及到的算法原理和模板。欢迎关注,一起交流进步!

猜你喜欢

转载自blog.csdn.net/qq_42815188/article/details/109147917