题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805495863296000
思路
这题是素数和进制转换的合成题
主要注意点
- 进制转换的代码
- prime[1]不是素数,这个时候需要输出no
int get_reverse(int num, int radix){vector<int> tempList;do{tempList.push_back(num % radix);num /= radix;}while(num != 0);//这个时候得到的序列已经是反过来的了int len = tempList.size(), result = 0;for(int i = 0; i < len; i++){result = result * radix + tempList[i];}return result;}
代码
#include<algorithm>#include<vector>#include<cstdio>using namespace std;const int maxn = 100010;vector<bool> isPrime(maxn, true);void get_prime(){isPrime[1] = false;for(int i = 2; i < maxn; i++){if(isPrime[i]){for(int j = 2 * i; j < maxn; j += i){isPrime[j] = false;}}}}int get_reverse(int num, int radix){vector<int> tempList;do{tempList.push_back(num % radix);num /= radix;}while(num != 0);int len = tempList.size(), result = 0;for(int i = 0; i < len; i++){result = result * radix + tempList[i];}return result;}int main(){get_prime();int n, radix;while(scanf("%d", &n) != EOF){if(n < 0) break;scanf("%d", &radix);if(!isPrime[n]){printf("No\n");} else {if(isPrime[get_reverse(n, radix)]) printf("Yes\n");else printf("No\n");}}}
