题目

A reversible prime in any number system is a prime whose "reverse" in that number system is also a prime. For example in the decimal system 73 is a reversible prime because its reverse 37 is also a prime.

Now given any two positive integers N (<105​​ ) and D (1<D≤10), you are supposed to tell if N is a reversible prime with radix D.

Input Specification:

The input file consists of several test cases. Each case occupies a line which contains two integers N and D. The input is finished by a negative N.

Output Specification:

For each test case, print in one line Yes if N is a reversible prime with radix D, or No if not.

Sample Input:

73 10

23 2

23 10

-2

Sample Output:

Yes

Yes

No

题目大意

说实在的,这个题目看到我吐血,谷歌翻译都都翻译不出来他想要的效果,我在找了好几篇博客之后看到的结论都是这个样子:

A reversible prime in any number system is a prime whose "reverse" in that number system is also a prime.

就是说,可逆素数: 在十进制下,N是个素数,且在D进制下的数值倒过来后,再转成十进制,还是个素数

反正我是真的从这个英文中看不出来这个意思。

题目就是:给出 N, 进制 D,输出 N 是否是 可逆素数。

思路

  • 编写判断十进制数是否是素数的方法(for循环进行到它开根号就可以了)
	    for (int i = 2; i <= sqr; ++i)
if (n % i == 0) return false;
  • 先判断 N 是否是 素数,若不是,直接输出 No 结束。

  • 求得 ND 进制下的反转后的结果,用一个数组保存。

    比如 123 在十进制下 反转后是 321(就算只有1位或者是0也要进行一次,所以用 do while

    • n 对10取余得到3,3写进数组第一个位置;
    • n = n / 10 = 12;
    • 重复上面的步骤
  • 把反转后的数字转成十进制再判断是否是素数

	// 转成十进制
for (int i = 0; i < len; ++i)
n = n * radix + arr[i];

代码

只要明白题目意思,也就没有什么难度。

#include <iostream>
#include <cmath>
using namespace std;
/**
* 这个题理解题目意思很重要
* A reversible prime in any number system is a prime whose "reverse" in that number system is also a prime.
* 就是说,可逆素数: 在十进制下,N是个素数,且在D进制下的数值倒过来,再反转成十进制,还是个素数
* 反正我是真没看出来
*/ // 是否是素数
bool isprime(int n) {
if (n <= 1) return false;
int sqr = sqrt(n);
for (int i = 2; i <= sqr; ++i)
if (n % i == 0) return false;
return true;
} int main() {
// 一个十进制的n,一个给定的进制D
int n, radix;
while (cin >> n) {
// 题意,最后一行只有一个负数,表示输入结束
if (n < 0) break;
cin >> radix;
// 首先n在十进制下要是个素数
if (!isprime(n)) {
cout<< "No" << endl;
continue;
}
// 得到在D进制下反转后的编码,如123在十进制下反转后是321
int len = 0, arr[20] = {0};
do {
arr[len++] = n % radix;
n = n / radix;
}while (n > 0);
// 转成十进制
for (int i = 0; i < len; ++i)
n = n * radix + arr[i];
// 如果转换之后的数字还是素数,那么它就是 可逆素数
cout<< (isprime(n) ? "Yes" : "No") << endl;
} return 0;
}

PAT 1015 Reversible Primes (20分) 谜一般的题目,不就是个进制转换+素数判断的更多相关文章

  1. PAT (Advanced Level) Practice 1015 Reversible Primes (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1015 Reversible Primes (20 分) 凌宸1642 题目描述: A reversible prime in any n ...

  2. PAT 甲级 1015 Reversible Primes (20 分) (进制转换和素数判断(错因为忘了=))

    1015 Reversible Primes (20 分)   A reversible prime in any number system is a prime whose "rever ...

  3. PAT (Advanced Level) Practice 1015 Reversible Primes (20 分)

    A reversible prime in any number system is a prime whose "reverse" in that number system i ...

  4. 1015 Reversible Primes (20 分)

    A reversible prime in any number system is a prime whose "reverse" in that number system i ...

  5. 【PAT甲级】1015 Reversible Primes (20 分)

    题意: 每次输入两个正整数N,D直到N是负数停止输入(N<1e5,1<D<=10),如果N是一个素数并且将N转化为D进制后逆转再转化为十进制后依然是个素数的话输出Yes,否则输出No ...

  6. PAT 1015 Reversible Primes[求d进制下的逆][简单]

    1015 Reversible Primes (20)(20 分)提问 A reversible prime in any number system is a prime whose "r ...

  7. pat 1015 Reversible Primes(20 分)

    1015 Reversible Primes(20 分) A reversible prime in any number system is a prime whose "reverse& ...

  8. PAT Advanced 1015 Reversible Primes (20) [素数]

    题目 A reversible prime in any number system is a prime whose "reverse" in that number syste ...

  9. PAT 1015 Reversible Primes

    1015 Reversible Primes (20 分)   A reversible prime in any number system is a prime whose "rever ...

随机推荐

  1. python信息收集(三)

        前两篇介绍了利用python编写一些脚本实现二层主机的发现,这一篇介绍一下三层主机的发现.     一般来说,三层主机的发现主要是通过ICMP协议来实现的.其中ICMP协议中的ping命令可以 ...

  2. 关于DNS解析:侧面剖析

    作为一个合格的重度windows使用用户,我清楚的知道一个文件——hosts文件:C:\Windows\System32\drivers\etc\hosts文件 该文件需要一定的管理员权限. 这个文件 ...

  3. INDIRECT函数实现动态图表的跨数据抓取

    涉及函数: indirect函数:通常有两种用法.直接指定单元格地址和隐式指定单元格地址.直接指定:=indirect("A4"),则会返回A4单元格所显示的内容.参数给定的既是字 ...

  4. 关于php抑错方法

    在循环里,如果@不能用的话,就使用try catch,是可以的

  5. apt 安装 版本

    1. 通过apt-get安装指定版本软件 apt-get install package=version 2. 查询指定软件有多少个版本 2.1 通过网站搜索https://packages.ubun ...

  6. java中有界队列的饱和策略(reject policy)

    文章目录 AbortPolicy DiscardPolicy DiscardOldestPolicy CallerRunsPolicy 使用Semaphore java中有界队列的饱和策略(rejec ...

  7. 2018 ICPC Pacific Northwest Regional Contest I-Inversions 题解

    题目链接: 2018 ICPC Pacific Northwest Regional Contest - I-Inversions 题意 给出一个长度为\(n\)的序列,其中的数字介于0-k之间,为0 ...

  8. 曹工力荐:调试 jdk 中 rt.jar 包部分的源码(可自由增加注释,修改代码并debug)

    背景 大家知道,jdk安装的目录下,一般会有个src.zip包,这个包基本对应了rt.jar这个包.rt.jar这个包里面,就放了jdk中,jdk采用java实现的那部分类库代码,比如java.lan ...

  9. dijkstra preiority_queue优化 紫书学习

    #include<bits/stdc++.h> using namespace std; const int maxn=1000+10; const int INF=1000000000; ...

  10. 加分二叉树 vijos1991 NOIP2003第三题 区间DP/树形DP/记忆化搜索

    描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,-,n),其中数字1,2,3,-,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一 ...