這題分兩問:求位數,求後500位
求位數:公式log10(x)+1,把冪移到前面即可
求後500位:其實如果讓求完整的數的話,那就麻煩了,數太多一定時間複雜度高;但現在是只求後500位啊!多的不用管只求這些就行啊,複雜度明顯降下來了!求再多次冪,快速冪二分不斷分+每次就500位這麼小的複雜度,所以一定可以很快完成!
還有個大數乘法技巧就是:不用直接輸入時,最好直接用int陣列!(省去了char陣列轉換數字的時間且更方便)
額,又新學了個memcpy複製函式,和for迴圈一樣效果
1 #include 2 #include3 #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位。麥森數有許多重要應用,它與完全數密切相關。任務 從檔...