【1015 20 判定素数 进制转换】 Reversible Primes

传送门

题意

多组测试样例,输入负数时结束,每组一个 \(N\) 表示数字,\(D\) 表示这个数字的进制,计算在此进制下的数字 \(N\) 以及反转后是否为素数

数据范围

\(1\leq N\leq 10^{5}\)
\(1\leq D\leq 10\)

题解

  • 将进制下的每一位数字计算出来存入数组后,再转化一下就是反转后的数字判断即可
  • 素数判定时候要对数字 \(1\) 进行特判, 判断的上界需要取到 \(\sqrt{x}\)

Code

#include <bits/stdc++.h>
using namespace std;

int n, d;

bool is_prime(int x) {
	if (x <= 1) return false;
	for (int i = 2; i <= x / i; i++) {
		if (x % i == 0) return false;
	}
	return true;
}
void solve() {
	if (not is_prime(n)) {
		cout << "No" << endl;
		return;
	}
	vector<int> p;
	while (n) {
		p.push_back(n % d);
		n /= d;
	}	
	for (auto it : p) {n = n * d + it;}
	if (is_prime(n)) cout << "Yes" << endl;
	else cout << "No" << endl;
}

int main() {
	while (cin >> n >> d && n >= 0) solve();
}
posted @ 2021-01-28 01:48  Hyx'  阅读(57)  评论(0)    收藏  举报