欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PAT (Advanced Level) 1015 Reversible Primes (20 分)

程序员文章站 2022-07-15 13:39:47
...

序:
这是一道进制+判断指数的题目。

题目概述:
给出一个十进制的数n,先判断其是否为质数;
然后给出进制d,将n在进制d下反转,得到一个新的十进制数,再判断其时候为质数;
若两个都是,输出yes;反之输出no

分析:
1.isprime函数的编写
2.n的反转:需要用到十进制转化d进制的手法,就是不停地取余和短除,然后反序将余数输出;但是如果我们需要反转的话,我们正序输出即可。这里涉及到的是小学奥数的进制转换hhhh

代码如下:

//什么是d进制的反转?
//n是十进制的数,十进制转d进制需要%、/操作,并且将%的结果反向输出

#include<bits/stdc++.h>
using namespace std;

//判断素数
bool isprime(int a)
{
    if(a <= 1) return false;
    for(int i = 2; i <= sqrt(a); i++)
    {
        if(a % i == 0) return false;
    }
    return true;
}

int main()
{
    int n, d;
    while(cin >> n >> d)
    {
        if(n < 0) break;
        //先判断正序
        if(!isprime(n))
        {
            cout << "No" << endl;
            continue;
        }
        //用vector记录反序
        vector<int> res;
        while(n > 0)
        {
            res.push_back(n % d);
            n /= d;
        }
        int reverse = 0;
        for(int i = 0; i < res.size(); i++)
            reverse = reverse * d + res[i];
        
        //判断反转
        if(!isprime(reverse))
        {
            cout << "No" << endl;
            continue;
        }
        else
        {
            cout << "Yes" << endl;
            continue;
        }   
        
    }
    return 0;
}

总结:
理解题意很重要。何谓反转?就是在d进制的表示下反转后,再将其按照十进制判断素数。

相关标签: PAT甲级 pat甲级