ACM 較大的數乘法取模技巧

2022-05-01 11:42:11 字數 623 閱讀 7168

比如模數是1e15這種,相乘的時候爆ll了,但是又不想用大數,咋辦呢?

long

long ksc(long

long a, long

long b, long

long

mod)

return

res;

}

《演算法競賽高階指南》 

聽說很穩? a∗

bmod

p=a∗

b−⌊a

∗bp⌋

∗p'>a∗bmodp=a∗b−⌊a∗bp⌋∗p

a∗bmodp=a∗b−⌊a∗bp⌋∗p 

用long double來計算⌊a∗

bp⌋'>⌊a∗bp⌋

⌊a∗bp⌋,誤差很小,因為long double的特性是存不下就捨棄低位,再把它轉成long long。直接用long long來計算。long long爆掉了會讓符號位出錯,但是小於2^63的位是不會掛的,這正好符合我們的需求。

ll mul(ll a,ll b,ll p)

ll mul(ll x, ll y)

ll mul(ll a,ll b,ll p)

acm 數的長度

時間限制 3000 ms 記憶體限制 65535 kb 難度 1 描述 n!階乘是乙個非常大的數,大家都知道計算公式是n n n 1 2 1.現在你的任務是計算出n!的位數有多少 十進位制 輸入 首行輸入n,表示有多少組測試資料 n 10 隨後n行每行輸入一組測試資料 n 0 n 1000000 輸...

ACM 奇怪的回文數

問題描述 回文 是指正讀反讀都能讀通的句子,它是古今中外都有的一種修辭方式和文字遊戲,如 我為人人,人人為我 等。在數學中也有這樣一類數字有這樣的特徵,稱為回文數 palindrome number 設a是一任意自然數。若將a的各位數字反向排列所得自然數b與a相等,則稱a為一回文數。例如123432...

棋盤分割 維數較大的動態規劃

一 問題描述 將乙個 的棋盤進行如下分割 將原棋盤割下一塊矩形棋盤並使剩下部分也是矩形,再將剩下的部分繼續如此分割,這樣割了 n 1 次後,連同最後剩下的矩形棋盤共有n塊矩形棋盤。每次切割都只能沿著棋盤格仔的邊進行 原棋盤上每一格有乙個分值 小於100的非負整數 一塊矩形棋盤的總分為其所含各格分值之...