题目

题目要求,判断一个数本身,及其对应进制的数反转后,是否为质数
所以要考虑把一个十进制数,转到任意进制,再转回十进制,再作判断
解法1
点击查看代码
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
// 判断一个数是否是质数
bool is_prime(int num) {
if (num < 2) return false;
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) return false;
}
return true;
}
// 进制转换:将 num 从 10 进制转换为 d 进制,并返回转换后的数字字符串
string convert_base(int num, int d) {
string result = "";
while (num > 0) {
result += char((num % d) + '0'); // 取模得到当前位
num /= d;
}
return result;
}
// 进制转换:将一个 d 进制表示的字符串转换回十进制
int to_decimal(string reversed_num, int d) {
int result = 0;
int power = 1;
for (int i = reversed_num.size() - 1; i >= 0; i--) {
result += (reversed_num[i] - '0') * power;
power *= d;
}
return result;
}
int main() {
int N, D;
while (cin >> N >> D) {
if (N < 0) break; // 负数终止输入
if (!is_prime(N)) {
cout << "No" << endl;
continue;
}
// 进制转换
string reversed_base_D = convert_base(N, D);
int reversed_N = to_decimal(reversed_base_D, D);
if (is_prime(reversed_N)) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
return 0;
}
一些心得
1、如果不记得prime这个单词是“质数”,题目就看不懂了。
2、输入数据没有给定多少个,但说了负数是终止符,所以读取数据的方法要稍微变一下
拓展
1、质数是指只能被1和自身整除的自然数
2、代码上判断一个数是否为质数,要用1到sqrt(num)这些数去除
浙公网安备 33010602011771号