日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

PAT甲级1015 Reversible Primes :[C++题解]进制位、秦九韶算法、判质数

發布時間:2025/4/5 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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++题解]进制位、秦九韶算法、判质数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。