PAT甲级真题1015 可逆质数

简介: PAT甲级真题1015 可逆质数

PAT甲级真题1015 可逆质数

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

例如,N=73,D=10,则 73 是质数,其十进制表示反转后为 37 也是质数,所以 73 在十进制系统中是一个可逆质数。

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

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

输入格式

输入包含多组测试数据

每组数据共一行,包含两个整数 N 和 D。

当输入一行为一个负数时,表示输入停止。

输出格式

对于每组数据,输出一个结果,占一行。

如果所给 N 在 D 进制系统中是一个可逆质数,则输出 Yes,否则输出 No。

数据范围

1≤N<10^5,

1<D≤10

输入样例:

73 10
23 2
23 10
-2

输出样例:

Yes
Yes
No

解题思路

此题主要要思考这么几个问题:

  • 怎么判断一个数是质数 推荐文章《判断质数》
  • 怎么转化为10进制 :秦九韶算法

  • 怎么转化为 d 进制

答案都在酒(代码)里了

AC代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long LL;
//判断质数
bool isPrime(LL num) {
    if (num <= 3) {
        return num > 1;
    }
    // 不在6的倍数两侧的一定不是质数
    if (num % 6 != 1 && num % 6 != 5) {
        return false;
    }
    LL sqrtc = (LL)sqrt(num);
    for (LL i = 5; i <= sqrtc; i += 6) {
        if (num % i == 0 || num % (i + 2) == 0) {
            return false;
        }
    }
    return true;
}
//转化为10进制
LL getn(char c)
{
    if(c<='9')return c-'0';
    else return c-'a'+10;
}
LL cal_10(string n,LL d){
    LL ret=0;
    for(auto c : n){
        ret = ret*d + getn(c);
    }
    return ret;
}
//转化为d进制
string transd(string n,LL d){
    string ch;//余数
    LL cur = stoll(n);
    string ans="";
    while(cur!=0){
        ch = to_string(cur%d);
        ans = ans + ch;
        cur = cur / d;
    }
    return ans;
    //置反D进制的结果:从上往下看的时候就是它转化结果的字符的置反
}
int main()
{
    string n;
    LL d;
    while(cin>>n>>d){
        //如果本身不是质数直接输出No
        if(!isPrime(stoll(n))){
            cout<<"No"<<endl;
        }else{
            //转化为D进制
            string dnum = transd(n,d);
            //再转换为10进制
            LL tenNum = cal_10(dnum,d);
            //判断是否为质数
            if(isPrime(tenNum))cout<<"Yes"<<endl;
            else cout<<"No"<<endl;
        }
    }
    return 0;
}


相关文章
|
固态存储 内存技术 NoSQL
基础代码NVMe模块的实例helloworld代码
基础代码NVMe模块的实例helloworld代码
|
网络协议 Java Maven
基于Netty实现TCP通信
基于Netty实现TCP通信
347 0
|
传感器 机器人 物联网
传感器类型分类
传感器类型分类
1332 0
|
5月前
|
消息中间件 人工智能 Apache
定义 AI 时代消息引擎,ApacheRocketMQ 荣获 InfoQ“2025 AI 开源明星项目”
Apache RocketMQ 凭借面向AI应用的事件驱动架构,荣获“2025中国技术力量榜单”AI开源明星项目。其创新推出LiteTopic模型,支持多智能体异步通信、智能任务调度与分布式会话管理,助力AI时代消息引擎演进,已在阿里云等大规模场景验证,并开源核心代码,共建A2A通信生态。
244 2
|
5G 网络架构 芯片
5G 标准的制定过程 | 带你读《5G 无线系统设计与国际标准》之三
ITU 在开发移动通信无线接口标准方面有着悠久的历史,包括制定 IMT-2000 和IMT-Advanced 在内的国际移动通信(IMT)标准框架,贯穿了整个 3G 和 4G 行业发展。
5G 标准的制定过程  | 带你读《5G 无线系统设计与国际标准》之三
|
6月前
|
物联网 网络安全 iOS开发
Cisco Packet Tracer 9.0 新增功能简介
Cisco Packet Tracer 9.0 (macOS, Linux, Windows) - 思科网络模拟工具Cisco Packet Tracer 9.0 (macOS, Linux, Windows) - 思科网络模拟工具
730 3
Cisco Packet Tracer 9.0 新增功能简介
|
弹性计算 运维 自然语言处理
操作系统智能助手OS Copilot新功能测评
一文带你了解操作系统智能助手OS Copilot的三大新功能
620 10
|
人工智能 JSON 自然语言处理
让AI听懂你的建模需求!BlenderMCP:自然语言指令直接操控 Blender,一句话生成复杂3D场景
BlenderMCP通过MCP协议实现Blender与Claude AI的无缝集成,支持通过自然语言指令完成3D建模、材质调整等复杂操作,显著提升创作效率。
1636 1
让AI听懂你的建模需求!BlenderMCP:自然语言指令直接操控 Blender,一句话生成复杂3D场景
|
机器学习/深度学习 算法
深度学习中的优化算法:从梯度下降到Adam
本文深入探讨了深度学习中的核心——优化算法,重点分析了梯度下降及其多种变体。通过比较梯度下降、动量方法、AdaGrad、RMSProp以及Adam等算法,揭示了它们如何更高效地找到损失函数的最小值。此外,文章还讨论了不同优化算法在实际模型训练中的表现和选择依据,为深度学习实践提供了宝贵的指导。
470 7
|
前端开发 JavaScript API
惊呆了!这些前端技术竟然能让你的网站实现无缝滚动效果!
【10月更文挑战第30天】本文介绍了几种实现网页无缝滚动的技术,包括CSS3的`scroll-snap`属性、JavaScript的Intersection Observer API以及现代前端框架如React和Vue的动画库。通过示例代码展示了如何使用这些技术,帮助开发者轻松实现流畅的滚动效果,提升用户体验。
1232 29