Reversible Primes(c++)

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 (<10​5​​) 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

思路

一开始的时候都没读懂题目什么意思,又是翻译又是看解题才懂。o(╥﹏╥)o
原来还要转进制的!!首先判断N是不是素数,如果是,就用N转为D进制的逆序再转为十进制,判断这个数是不是素数。
有点绕QwQ

这个转进制和数据逆序。。。

还是自己太垃圾了。
首先,逆序,例如23 2这个样例,一般手算都是,23除以2商11余1,11除以2商5余1,5除以2商2余1,2除以2商1余0,1除以2商0余1.转为2进制为10111(从后往前取余数)。
逆序我们可以直接从前往后取:

string res;
	while(N){//逆序 
		res += N%D + '0';
		N /= D;
	}

res就是D进制逆序。
然后转为十进制:

int st = 0;
	for(int i=0;i<res.size();i++){
		st = st*D + res[i]-'0';
	} 

最后判断st是不是素数。

代码如下:

#include<iostream>
#include<sstream>
using namespace std;

//判断是否为素数 10进制 
bool sushu(int N){
	if(N<=1)return false;
	int k = 0;
	for(int i=2;i<N;i++){
		if(N % i == 0){
			k = 1;
		}
		if(k == 1)return false;
	}
	return true;
} 

int zhuan(int N,int D){
	string res;
	while(N){//逆序 
		res += N%D + '0';
		N /= D;
	}
	//转为十进制
	int st = 0;
	for(int i=0;i<res.size();i++){
		st = st*D + res[i]-'0';
	} 
	return st;
}
int main(){
	int N,D;
	cin>>N;
	while(N > 0){
		cin>>D;
		if(sushu(N)&&sushu(zhuan(N,D))){
			cout<<"Yes"<<endl;
		}else{
			cout<<"No"<<endl;
		}
		cin>>N;
	}
	
	return 0;
}

唉,垃圾如我,越来越感觉自己菜了。

但是::::::

一个集坚强与自信于一身的菇凉。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淡雅的惆怅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值