AcWing 90 64位整數乘法 快速乘

2021-10-21 20:54:51 字數 1104 閱讀 3932

acwing 90. 64位整數乘法

求 a 乘 b 對 p 取模的值。

輸入格式

第一行輸入整數a,第二行輸入整數b,第三行輸入整數p。

輸出格式

輸出乙個整數,表示a*b mod p的值。

資料範圍

1≤a,b,p≤1018

輸入樣例:

3

45

輸出樣例:

2
剛開始看到這個題的時候,我是想到的是質因子相乘,然後最後求解。

#includeusing namespace std;

typedef long long ll;

int main(void)

} res=(ll)res*a%p;

for(ll i=2;i<=b/i;i++)

} res=(ll)res*b%p;

cout

}

這個思路很好,但是沒有做出來,原因在於:

會存在極大極大的質數,讓你直接溢位。

我的思路可能錯了,然後我想到了用快速冪類似的方法,快速冪是用的類似位運算的方法,然後我改進了一下,把相乘變成加減,最後實現了乙個快速乘的演算法。

**如下:

#includeusing namespace std;

typedef long long ll;

ll a,b,p;

ll quickpow(ll k)

return res;

}int main(void)

我還發現了很bug的做法

用gcc的128位去做,很神奇,不知道怎麼實現的

#includeusing namespace std;

typedef long long ll;

int main(void)

AcWing90 64位整數乘法

快速冪 二分 拆分,一方面二分消除重複計算,另一方面將超過表示範圍的運算降為結果在資料範圍內的運算。其一,ll的表示範圍為略低於2 64,兩個六十四位數相加就可以用unsigned ll儲存,變乘法為加法。其二,對於二分,將b用二進位制表示,將運算拆為移位和加法或乘法。對於具體的演算法,一般快速冪a...

AcWing 90 64位整數乘法

64位整數乘法 求 a 乘 b 對 p 取模的值。輸入格式 第一行輸入整數a,第二行輸入整數b,第三行輸入整數p。輸出格式 輸出乙個整數,表示a b mod p的值。資料範圍 1 a,b,p 1018 輸入樣例 34 5輸出樣例 2解題思路 首先這道題目想到的第乙個思路是直接做乘法,然後再取模,但是...

AcWing 90 64位整數乘法

求 a 乘 b 對 p 取模的值。輸入格式 第一行輸入整數a 第二行輸入整數b,第三行輸入整數p 輸出格式 輸出乙個整數,表示a b mod p的值。資料範圍 1 a b,p 1018 1 a,b,p 10 1 a,b,p 10 18輸入樣例 3 45輸出樣例 2模板 intfp int a,int...