愚人节题目,具体题面看翻译。
先写一个判断素数的函数,这题并不需要什么特殊的筛法,新手可以参考以下代码。
bool isprime(int x) {
if (x <= 1) return 0;
for (int i = 2; i <= x / i; i++) {
if (x % i == 0) return 0;
}
return 1;
}
如果你追求最优解可以去看看其他大佬的题解。
再写一个反转函数。
int work(int n) {
int sum = 0;
while (n) {
sum = sum * 10 + n % 10;
n /= 10;
}
return sum;
}
然后拼起来,写成一个判断反素数函数。注意一下,反转前与反转后的数字不可相同,也就是不可为回文数。
bool flag(int n) {
return isprime(n) and isprime(work(n)) and work(n) != n;
}
最后贴上代码
#include <bits/stdc++.h>
#define ll long long
#define INF 1e9
using namespace std;
bool isprime(int x) { // 素数判断
if (x <= 1) return 0;
for (int i = 2; i <= x / i; i++) {
if (x % i == 0) return 0;
}
return 1;
}
int work(int n) { // 反转数字
int sum = 0;
while (n) {
sum = sum * 10 + n % 10;
n /= 10;
}
return sum;
}
bool flag(int n) { // 反素数判断
return isprime(n) and isprime(work(n)) and work(n) != n;
}
int n, cnt; // cnt 用来记录当前是第几大的反素数
signed main() {
ios :: sync_with_stdio(0);
cin >> n;
int num = 1;
while (1) { // 暴力枚举,直到枚举到第 n 大的反素数
if (flag(num)) cnt++;
if (cnt == n) {
cout << num;
break;
}
num++;
}
return 0;
}
标签:int,题解,sum,ucyhf,素数,bool,isprime
From: https://www.cnblogs.com/xvl-/p/17234275.html