1015 Reversible Primes

1015 Reversible Primes

题目大意

每行给出两个数,一个十进制数,一个基数,判断在这个基数情况下,十进制数转为这个基数情况后,逆置,然后转为十进制数,再判断这个十进制数是不是为素数。

算法思想

  • 一个函数用来转逆置数,一个函数用来判断是不是为素数
  • 注意坑点,1不是素数
  • 还有个坑,需要给出的十进制数和逆置后的十进制数都为素数时,才会输出yes

代码

#include<iostream>
#include<vector>
#include<stack>
using namespace std;
bool prime(int x)//判断是否为素数
{
	if (x <= 1)
		return false;
	for (int i = 2; i <= x/2 ; i++)
	{
		if (x % i == 0)
			return false;
	}
	return true;
}
int sum(int rad, int w)//计算数位
{
	int sums = 1;
	for (int i = 0; i < w; i++)
		sums *= rad;
	return sums;
}
int exrev(int x, int rad)//计算逆置数
{
	int num = 0;
	stack<int>nbe;
	stack<int>naf;
	while (x != 0)//采用栈
	{
		nbe.push(x % rad);
		x = x / rad;
	}
	while (!nbe.empty())//进入另一个栈,实现逆置
	{
		naf.push(nbe.top());
		nbe.pop();
	}
	while(!naf.empty())//依次弹出,计算逆置数
	{
		num += naf.top() * sum(rad, naf.size() - 1);
		naf.pop();
	}
	return num;
}
int main()
{
	vector<int>n;
	vector<int>d;
	while (1)
	{
		int a, b;
		cin >> a;
		if (a < 0)
			break;
		cin >> b;
		n.push_back(a);
		d.push_back(b);
	}
	for (int i = 0; i < n.size(); i++)
	{
		if (prime(exrev(n[i], d[i])) && prime(n[i]))//需要逆置前后都为素数
			cout << "Yes" << endl;
		else
			cout << "No" << endl;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值