题目分析:
本题计算过程简单,但翻译令我迷茫:题意读清楚很重要(反正我是懵逼了)对于一个10进制的数,如果它是一个素数,把它转换成d进制,再将这个序列逆序排,这个逆序的d进制数的10进制表示如果也是素数,则输出Yes,否则No
1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 5 int a[20]; //存放n转换成的d进制数的每一位 6 int cnt; //存放d进制的位数 7 8 bool isPrime(int x){ 9 if(x == 1) return false; 10 for(int i = 2; i <= sqrt(x); i++){ 11 if(x % i == 0) return false; 12 } 13 return true; 14 } 15 16 void transform(int n, int d){ 17 //短除法 将值存入a数组 18 cnt = 1; 19 while(n > 0){ 20 int x = n % d; 21 a[cnt++] = x; 22 n /= d; 23 } 24 //将a数组从cnt-1~1开始遍历完成将d进制的翻转再次转换成10进制表示的过程 25 int ans = 0; 26 int base = 1; 27 for(int i = cnt-1; i >= 1; i--){ 28 ans += base * a[i]; 29 base *= d; 30 } 31 if(isPrime(ans)) printf("Yes "); 32 else printf("No "); 33 } 34 35 int main(){ 36 int n, d; 37 while(scanf("%d", &n) != EOF){ 38 if(n < 0) break; 39 scanf("%d", &d); 40 if(isPrime(n)){ 41 //将n转换成d进制的数 42 transform(n, d); 43 }else{ 44 printf("No "); 45 } 46 } 47 return 0; 48 }