日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

除法取余解决方法

發布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 除法取余解决方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在實際做題中,我們經常能遇到對除法取余的式子,比如(a/b)%c。碰到這種情況我們有兩種方法來解決。

通用的方法

(a/b)mod m = [a mod (m*b) ] / b
證明如下:

通過逆元求解

首先說一下費馬小定理

費馬小定理(Fermat’s little theorem)是數論中的一個重要定理,在1636年提出。如果p是一個質數,而整數a不是p的倍數,則有a^(p-1)≡1(mod p)。

然后說一下逆元 如果存在x使得 ax ≡1 mod p,則說x是a的逆元。
   通過上面我們知道a(p-1)≡1(mod p),我們將等式換為a * a(p-2) ≡ 1 mod p,這不就說明了a的逆元就是a(p-2)嘛。
   回到我們的 (a/b) mod c,通過變換的到 a * 1 * b-1 mod c
   我們又知道 bc-1 mod c = 1, 帶入上面的到,a* b c-1 * b-1 mod c
   在變換得到a*bc-2 mod c。
   這樣就把一個除法的式子轉換為了一個乘法的式子,一般情況下這個c都特別的大,所以b的逆元應該使用快速冪進行求解。而且給出的c也都是一個素數。

推薦例題

牛客

解題思路,平方和公式 n * (n+1) * (2 * n+1)/6
對于除6,要使用逆元進行求解

ac代碼

#include <iostream>using namespace std;typedef long long ll; const long long MOD = 1000000007;ll qul(ll a, ll b) {ll sum = 1;while (b){if (b&1)sum = (sum%MOD*a%MOD)%MOD;a = (a%MOD*a%MOD)%MOD;b>>=1;}return sum; }int main() {ll n;ll num = qul(6, MOD-2);while (~scanf("%lld", &n)){printf ("%lld\n", (((n%MOD)*((n+1)%MOD))%MOD*((2*(n%MOD)+1)%MOD)%MOD*num)%MOD);}return 0; }

總結

以上是生活随笔為你收集整理的除法取余解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。