Reversible Primes

  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 (<) and D (1), 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

解题思路:
  本题给出一个十进制数字n,之后给出其进制d,要求判断其是不是可逆素数,若是可逆素数输出Yes否则输出No。

  本题的可逆素数要求给出数字本身是素数且,将其转化为给出的进制,反转后重新转化为十进制还是素数。

  如:23的2进制为10111反转后为11101 = 29,29与23都是素数,所以23是可逆素数。

  由于本题有多组输入,所以可以用素数筛(埃氏筛法)先将素数打表。

  埃氏筛法:

int prime[maxn];
bool vis[maxn] = {false};
int cnt = ;
void findPrime(){ //埃氏筛法
//每找到一个一个素数将其倍数都标记为不是素数
//时间复杂度O(n loglogn)
for(int i = ; i < maxn; i++){
if(vis[i] == false){ //i是素数
prime[cnt++] = i;
for(int j = * i; j < maxn; j += i){
vis[j] = true; //标记所以i的倍数
}
}
}
}

  之后根据我们得到的素数判断输入的数是否为素数,若不是素数直接输出No,若是素数则将其转化为对应进制的数字后反转,将反转后得到的数字重新转化为10进制,在判断其是不是素数,是的话输出Yes否则输出No。

  这样我们就需要两个函数,一个用来将其他进制数转化为10进制。另一个用来将10进制转化为其他进制并反转。

  转化为d进制:

string decimalToOther(int num, int radix){  //将十进制数转化为其他进制数
string ans;
//ans从最低位开始记录,结束后得到的直接就是转化后数字的反转
while(num){
ans += (num % radix) + '';
num /= radix;
}
return ans;
}

  转化为10进制

LL toDecimal(string num, int radix){    //将某进制数转化为10进制
LL ans = ;
for(int i = ; i < num.size(); i++){
ans = ans * radix + (num[i] - '');
if(ans < )
return -;
}
return ans;
}

  AC代码

 #include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 1e6+;
int prime[maxn];
bool vis[maxn] = {false};
int cnt = ;
void findPrime(){ //埃氏筛法
//每找到一个一个素数将其倍数都标记为不是素数
//时间复杂度O(n loglogn)
for(int i = ; i < maxn; i++){
if(vis[i] == false){ //i是素数
prime[cnt++] = i;
for(int j = * i; j < maxn; j += i){
vis[j] = true; //标记所以i的倍数
}
}
}
}
LL toDecimal(string num, int radix){ //将某进制数转化为10进制
LL ans = ;
for(int i = ; i < num.size(); i++){
ans = ans * radix + (num[i] - '');
if(ans < )
return -;
}
return ans;
}
string decimalToOther(int num, int radix){ //将十进制数转化为其他进制数
string ans;
//ans从最低位开始记录,结束后得到的直接就是转化后数字的反转
while(num){
ans += (num % radix) + '';
num /= radix;
}
return ans;
}
int n, d;
int main()
{
findPrime(); //素数打表
while(scanf("%d", &n) != EOF && n > ){
//输入n,n < 0时直接结束运算
scanf("%d", &d);
//输入进制d
if(vis[n] == true || n <= ){ //若n不是素数直接输出No进行下一次运算
printf("No\n");
continue;
}
string toRadix = decimalToOther(n, d);
//将n转化为d进制并反转
int ans = toDecimal(toRadix, d);
//将反转的数重新转化为10进制
if(vis[ans] == true || ans <= ){//若反转的数不是素数输出No
printf("No\n");
continue;
}
printf("Yes\n"); //否则输出Yes
}
return ;
}

PTA (Advanced Level) 1015 Reversible Primes的更多相关文章

  1. PAT (Advanced Level) 1015. Reversible Primes (20)

    简单题. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> ...

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

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

  3. PAT 1015 Reversible Primes

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

  4. PAT 甲级 1015 Reversible Primes(20)

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

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

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

  6. pat 1015 Reversible Primes(20 分)

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

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

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

  8. PTA(Advanced Level)1036.Boys vs Girls

    This time you are asked to tell the difference between the lowest grade of all the male students and ...

  9. 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 ...

随机推荐

  1. Cockroachdb 二、手动部署

    二 集群手动部署 **需求** a 本地已安装CockroachDB b 可SSH访问每台机器,用于分发二进制文件和证书 c 端口 26257 用于集群内部通信及客户端访问连接HAProxy 8080 ...

  2. css选择器与DOM'匹配的关系

    一道面试题 css 选择器匹配时,只考察是否包含有对应的class,而与class的顺序无关 而css的定义是后面的覆盖前面的定义 原理:http://www.w3.org/html/ig/zh/wi ...

  3. linux学习之vi文件编辑命令

    如果文件为只读则无法使用普通用户编辑,需要切换到root用户,具体名称可参考: https://www.cnblogs.com/huangwei1992/p/9493443.html vi文件编辑命令 ...

  4. 使用WebService调用第三方服务

    场景 某个系统服务由第三方提供,我方要使用到这个这个服务,就可以使用WebService的方式. 什么是WebService 关于什么WebService,官方是这么解释的: Web service是 ...

  5. iOS View 外层奇怪的黑线

    最近碰到一个问题,当时是为了建了一个能自动适应内容的 Label.根据内容,我计算出需要的尺寸,然后把新尺寸设置给 Label. 但是显示的时候,一个奇怪的现象出现了,Label 的顶端总是有一条浅浅 ...

  6. BZOJ1558 等差数列

    题目链接:戳我 实话实话,看了几篇题解真的没看懂,我觉得讲的都有问题.这里对于线段树维护的s写了一点我自己的理解. 看到等差数列,我们考虑对数列做差,这样如果是等差数列,那么值应该相等.(比较容易维护 ...

  7. change和onChange

    change是jquery上的绑定事件,可用于下拉框动态关联数据: $(function(){ $("#id").change(function(e){ alert($(this) ...

  8. 【ocp-12c】最新Oracle OCP-071考试题库(45题)

    45.(9-16)choose the best answer: View the Exhibit and examine the data in the EMPLOYEES table. You w ...

  9. PRINT语句详解

    首先摘自联机丛书中的PRINT语法如下: PRINT msg_str | @local_variable | string_exp  以上可看出PRINT语句的输出参数均为字符或字符串的常量或变量 - ...

  10. LOJ#2882. 「JOISC 2014 Day4」两个人的星座(计算几何)

    题面 传送门 题解 我们发现如果两个三角形相离,那么这两个三角形一定存在两条公切线 那么我们可以\(O(n^2)\)枚举其中一条公切线,然后可以暴力\(O(n^3)\)计算 怎么优化呢?我们可以枚举一 ...