題目分析:
本題計算程序簡單,但翻譯令我迷茫:題意讀清楚很重要(反正我是懵逼了)對于一個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\n"); 32 else printf("No\n"); 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\n"); 45 } 46 } 47 return 0; 48 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/138793.html
標籤:其他
