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. 在定制工作项时,把“团队项目”作为变量获取生成版本信息

    有用户最近提出这个需求: 通过工作项定制,新增一个字段用以保存项目Bug的"影响版本"信息,但是需要从当前团队项目的服务器生成纪录中获取版本的选项,类似默认模板中的"发现 ...

  2. solr-DIH:定时增量索引

    参考:官方文档,http://wiki.apache.org/solr/DataImportHandler#Scheduling googlecode 找到:https://code.google.c ...

  3. 多次grep 没有看到输出

    tail -f xxx.log | grep aaaa | grep bbbb 发现没有日志输出 但log中的那条记录包含aaaa 和 bbbb,就是说tail  -f xxx.log | grep ...

  4. Android 透明状态栏

    在 android 4 系统中可以设置透明状态栏. 但在 android 5.0 以上遇到问题.但问题是可以解决的,需要正确的设置 theme. 但是需要注意一点,5以上可以修改 status bar ...

  5. python--区分函数和方法, 反射

    1.  isinstance,   type,   issubclass isinstance(): 判断你给的xxx对象是否是xxxxx类型的,只支持向上判断 isinstance(object, ...

  6. “全栈2019”Java第一百一十一章:内部类可以被覆盖吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. 如何无人值守安装linux系统(上)

    如何开始 Linux 的无人值守安装 一.预备知识: I.什么是PXE PXE并不是一种安装方式,而是一种引导方式.进行PXE安装的必要条件是要安装的计算机中包含一个PXE支持的网卡(NIC),即网卡 ...

  8. rpm 安装卸载

    安装命令 rpm -i example.rpm 安装 example.rpm 包: rpm -iv example.rpm 安装 example.rpm 包并在安装过程中显示正在安装的文件信息: rp ...

  9. 谷歌将对欧洲 Android 设备制造商收取其应用服务费用

    简评:欧盟就谷歌违反了<反垄断法>开出天价罚单,导致谷歌运营生态被打破,为了配合这一裁决,谷歌将调整其运营模式.欧盟似乎赢了,而这最后买单的却是消费者. 今年七月份,谷歌要求 Androi ...

  10. 【ASP.NET Core MVC 入门须知】Net Core和Net Framework 的区别

     1.简单介绍 从上面图中我们可以看到.net  主要分为三个部分 .net FrameWork,.net Core ,Xamarin XAMARIN  主要用来构建APP的主要用的是C#语言 .NE ...