洛谷P1045麥森數(高精度乘法)

2022-06-24 15:18:10 字數 1228 閱讀 5728

這題分兩問:求位數,求後500位

求位數:公式log10(x)+1,把冪移到前面即可

求後500位:其實如果讓求完整的數的話,那就麻煩了,數太多一定時間複雜度高;但現在是只求後500位啊!多的不用管只求這些就行啊,複雜度明顯降下來了!求再多次冪,快速冪二分不斷分+每次就500位這麼小的複雜度,所以一定可以很快完成!

還有個大數乘法技巧就是:不用直接輸入時,最好直接用int陣列!(省去了char陣列轉換數字的時間且更方便)

額,又新學了個memcpy複製函式,和for迴圈一樣效果

1 #include 2 #include 

3 #include 4 #include 5 #include 6 #include 7 #include 8

using

namespace

std;

9 typedef long

long

ll;10 typedef unsigned long

long

ull;

11const

int maxn=500;12

intr[maxn],a[maxn];

13int

c[maxn];

14int

p;15

16void

mul_1()

1730}31

}32}33

34//

for(int i=0;i<=maxn-1;i++) r[i]=c[i];

35 memcpy(r,c,sizeof(r));//

新學函式hh

36 memset(c,0,sizeof

(c));37}

3839

void mul_2()//

其實2和1一樣,只是改了幾小處

4053}54

}55}56

57//

for(int i=0;i<=maxn-1;i++) a[i]=c[i];

58 memcpy(a,c,sizeof

(a));

59 memset(c,0,sizeof

(c));60}

6162

void qpow(int

b)6370}

7172

intmain()

7390 cout<9192

return0;

93 }

完。

洛谷P1045 麥森數 快速冪 高精度乘法

題目大意 計算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 ...

洛谷 P1045 麥森數(高精度 快速冪)

題目 標籤 高精度 快速冪 此題主要分為兩個部分,第乙個部分是求位數,第二部分是求最後500位數字。便於理解 下面 是普通的快速冪運算。對於本題的 muti1 相當於計算result a muti2 相當於計算a a 不同之處只是先用tmp臨時存起計算結果,再複製給相應的result和a。int q...

洛谷P1045 麥森數

形如2 12p 1的素數稱為麥森數,這時p p 一定也是個素數。但反過來不一定,即如果p p 是個素數,2 12p 1不一定也是素數。到1998年底,人們已找到了37個麥森數。最大的乙個是p 3021377p 3021 377 它有909526位。麥森數有許多重要應用,它與完全數密切相關。任務 從檔...