題目:標籤:高精度、快速冪
此題主要分為兩個部分,第乙個部分是求位數,第二部分是求最後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位。麥森數有許多重要應用,它與完全數密切相關。任務 從檔...