PAT甲级1015 Reversible Primes :[C++题解]进制位、秦九韶算法、判质数
生活随笔
收集整理的這篇文章主要介紹了
PAT甲级1015 Reversible Primes :[C++题解]进制位、秦九韶算法、判质数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目分析
- 題目鏈接
題目分析
十進制轉化為d進制如何做?
while(n){n% d; //取d進制數下的最低位n/=d; }比如 十進制下的n=13 ,進制d =2。經過 反復的n%d 和n/=d 得到1011 低位在前。反轉之后才是n的二進制數 1101。
本題的過程是(n)ten→()D→翻轉→()D→()ten(n)_{ten} \rightarrow ()_D \rightarrow翻轉\rightarrow ()_D \rightarrow ()_{ten}(n)ten?→()D?→翻轉→()D?→()ten?
恰好可以使用上面求d進制的方法,結合秦九韶算法,就可以直接求出 十進制n,轉化為d進制,d進制下翻轉,然后再對應成10進制整個過程:
因為 在while循環中 x%d 是原數 n對應到d進制中的最低位, 恰好就是d進制下翻轉之后的最高位!!! 而秦九韶算法就是從最高位開始求 由d進制轉化為10進制的!!! 所以完全可以結合起來。
int r =0 ; while(n){r = r*d + r%d; n /= d;}r is the result最后r中就是整個過程的結果 ,即先對應到d進制,然后再翻轉,然后再對應回10進制之后的結果。 只需要兩行關鍵代碼。ac代碼
#include<bits/stdc++.h> using namespace std;//判質數 bool isPrime(int n){if (n==1) return false;for(int i=2;i<= n/i ;i++)if(n%i == 0) return false;return true; }//檢查是否合法 bool check(int n ,int d){if(!isPrime(n)) return false;//求十進制到d進制,翻轉 再到十進制// n%d 就是 d進制下 n的最低位,即翻轉的最高位,然后恰好適配秦九韶算法!// 秦九韶算法:求d進制到10進制。 從高位到低位( r =r *d + 數)int r =0;while(n){r =r*d + n%d;n /= d;}return isPrime(r);}int main(){int n , d;while(cin>> n >> d , n>0){if(check(n, d)) cout<<"Yes"<<endl;else cout<<"No"<<endl;} }題目鏈接
PAT甲級1015 Reversible Primes
總結
以上是生活随笔為你收集整理的PAT甲级1015 Reversible Primes :[C++题解]进制位、秦九韶算法、判质数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT甲级1010 Radix :[C+
- 下一篇: PAT甲级1027 Colors in