題目大意:計算2p−
12^p-1
2p−1
的位數和最後500位數字(用十進位制高精度數表示)
題目分析:
1、首先是計算位數
我們不難發現,2p−
12^p-1
2p−1
和2
p2^p
2p在十進位制下的位數是相同的,因此,我們只需要計算2
p2^p
2p的位數,我們不妨設
1 0k
=2
p10^k=2^p
10k=2p
那麼k =p
∗log
102
k = p*log_2
k=p∗lo
g10
2再將k向下取整就ok了
2、計算最後500位數字
這個就是 我不會的 簡單的高精度乘法了
(我剛開始沒有算複雜度,,,以為是個水題,打了個暴力)
#include
#include
#include
#include
using
namespace std;
int f[
1005
],ans[
1005
],rans[
1005];
//乘法需要開2倍空間
void
solve
(int a,
int b)
return;}
intmain()
ans[0]
--;//不用擔心最後一位是0的情況
for(
int i=
499;i>=
0;i--
)return0;
}
洛谷 P1045 麥森數(高精,位數公式)
求2p 1的最後500位數 p 3100000 以前碰到高精都是python 好 想寫一下c的高精,第一次寫,踩了好多坑 這個題是高精乘法 快速冪 第一小問是求位數,可以用乙個求位數的公式 k log10 n 1 2p 1和2p的位數是一樣的,所以直接求2p的位數即可 log10 2p p log1...
洛谷P1045 麥森數
形如2 12p 1的素數稱為麥森數,這時p p 一定也是個素數。但反過來不一定,即如果p p 是個素數,2 12p 1不一定也是素數。到1998年底,人們已找到了37個麥森數。最大的乙個是p 3021377p 3021 377 它有909526位。麥森數有許多重要應用,它與完全數密切相關。任務 從檔...
洛谷P1045麥森數
題幹很簡單,就是要求2的p次方 1的位數和後500位。首先我們肯定不會去把這個數算出來,不然鐵t,那怎麼算位數呢?於是我們想一想數學方法因為2的p次方個位數必不為0,所以2的p次方 1的位數和2的p次方位數相同。又有10的n次方是n 1位數所以轉化一下2的p次方就是10的log10 2 p 1位數,...