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

2021-09-27 07:47:21 字數 1109 閱讀 4528

題目:

標籤:高精度、快速冪

此題主要分為兩個部分,第乙個部分是求位數,第二部分是求最後500位數字。

便於理解:下面**是普通的快速冪運算。對於本題的**,muti1()相當於計算result *= a;,muti2()相當於計算a *= a;,不同之處只是先用tmp臨時存起計算結果,再複製給相應的result和a。

int

quickpower

(int a,

int b)

//是求a的b次方

return result;

}

#include

#include

#include

using

namespace std;

int p, res[

1005

], a[

1005];

int tmp[

1005];

// 臨時儲存

void

muti1()

}for

(int i =

0; i <

500; i++

)memcpy

(res, tmp,

sizeof

(tmp));

}void

muti2()

}for

(int i =

0; i <

500; i++

)memcpy

(a, tmp,

sizeof

(tmp));

}int

main()

muti2()

; p /=2

;}res[0]

--;// 2^p-1中的減1

for(

int i =

500; i >

0; i--

)else

} cout << endl;

return0;

}

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

這題分兩問 求位數,求後500位 求位數 公式log10 x 1,把冪移到前面即可 求後500位 其實如果讓求完整的數的話,那就麻煩了,數太多一定時間複雜度高 但現在是只求後500位啊!多的不用管只求這些就行啊,複雜度明顯降下來了!求再多次冪,快速冪二分不斷分 每次就500位這麼小的複雜度,所以一定...

洛谷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 麥森數

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