a的b次方的前N位數和後N位數

2022-04-11 17:22:43 字數 821 閱讀 4694

a^b,假如a和b分別是10000000 10000000,我們知道計算機是無法儲存這樣大的數的。

看來直接計算,然後取前n位和後n位,是不可能的了。

先來看後n位如何計算,假設n==3。

那麼不管a實際上有多大,我們的計算結果實際上只和a的後3位有關,也就是說第四位開始對我們的答案是沒有影響的,能理解麼?

所以我們先讓a對1000取模,然後利用快速冪演算法求出a^b次方,過程中別忘記了對1000取模。

再來看前n位如何計算,同樣假設n==3.

假設a^b==c。那麼我們對c取乙個log10,得到d。

d肯定是乙個浮點數,我們先看d的整數部分,10^(d的整數部分)等於100000....(d個0),好了,注意觀察,第乙個數是1,其他都是0。

也就說,10^(d的小數部分)最終將直接影響最左邊的n位數。將這個結果乘以1,就是前1位的答案,乘以10,就是前2位的答案。。。類推

可以拿hdu 1060和1061練練手

view code

1 #include2 #include3

using

namespace

std;45

int pow(int a,int k) //

後3位數的快速冪演算法

616 a=a*a;

17 a%=1000

;18 k>>=1;19

}20return

ans;21}

2223

intmain()

2439

return0;

40 }

a b的前n位數

假設我們現在需要知道 ab 的後 n 位數或前 n 位數,簡單直觀的做法就是求出 ab 的值,然後在分別取前 n位或後 n位,不過在 a,b很大的情況下顯然是無法儲存的。所以,直接求是不可能的了。讓我們先來看看後 n 位如何求?因為我們只要後 n 位,那麼我們都知道把 ab 的值模上乙個10n 就是...

求n!的位數

用log10 n 1向下取整可以求n的位數,若要求n 的位數,可以用log10 n 1 log10 1 log10 2 log10 3 log10 n 1 向下取整 例 蒜頭君對階乘產生了興趣,他列出了前 10個正整數的階乘以及對應位數的表 nn 位數1 1 1 2 2 1 3 6 1 4 24 2...

求大數n 的位數

也是壇裡面的問題 已知正整數 n 求 n!的十進位制數共有多少位。這個 n 怎麼辦?n 的增長率是很可怕的,比 e n 還要快,其實就是 o n n 當 n 值 較 大時,就不能忍了。這個 較 有多大呢?等後面算完了就知道了。遞迴算 n 便是尾遞迴來說,便是棧展得開,效率也受不了,便是效率受得了,也...