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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数论练习1 ( 曹冲养猪 + [POJ 2891]Strange Way to Express Integers + 乘法逆元【带证明】)

發布時間:2023/12/3 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数论练习1 ( 曹冲养猪 + [POJ 2891]Strange Way to Express Integers + 乘法逆元【带证明】) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

雖然作業還沒有做完,但是我還是放不下它,對此,我只想說:
今天你對作業愛理不理,明天它就讓你補到飛起

DP先放放,我們要雨露均沾

  • 練習上手:乘法逆元
    • 題目
    • 題解
    • 代碼實現
  • 曹沖養豬?(互質的中國剩余定理)
    • 題目
    • 題解
    • 代碼實現
  • Strange Way to Express Integers(不互質的中國剩余定理)
    • 題目
    • 題解
    • 代碼實現

練習上手:乘法逆元

題目


題解

對于這種求[1,n]區間的乘法逆元,
費馬小定理?

擴展歐幾里得?

這兩種對于求單個是比較有用的,O(nlogn)
但是對于這種區間求解就需要O(n)的線性篩了

for ( int i = 2;i <= n;i ++ )inv[i] = inv[p % i] * ( p - p / i ) % p;

至于為什么是這樣子的,我們來進行簡單推理:
首先應該要了解
對于數字A,B存在A?X≡1(modBA*X≡1(mod BA?X1modB),則稱X為A對B的逆元。
一般這個乘法逆元是運用在需要取模而過程中又涉及到除法運算的時候,
將其轉化為乘法計算

進入證明?:

T=p/i,K=pT=p/i,K=pT=p/i,K=p%iii
則有K+T?i=pK+T*i=pK+T?i=p,被除數等于商乘除數加余數
K+T?i≡0(modK+T*i≡0 (modK+T?i0(mod p)p)p)
變形:K≡?T?i(modK≡-T*i(modK?T?i(mod p)p)p)
兩邊同時除以i?Ki*Ki?K
–>1/i≡?T/K(mod1/i≡-T/K(mod1/i?T/K(mod p)p)p)
1/i1/i1/i就是i的逆元,
因為這兩個相乘取模p同余1,同時:除以K就相當于乘以K的逆元
接下來,將T=p/i,K=pT=p/i,K=pT=p/i,K=p%iii帶入進去?
inv[i]=?p/i?inv[pinv[i]=-p/i*inv[pinv[i]=?p/i?inv[p%i]i]i](mod p)p)p)
為了防止出現負數,就加一個p?inv[pp * inv[pp?inv[p%i]i]i],利用取模的運算律
inv[i]=inv[pinv[i] = inv[pinv[i]=inv[p%i]?(p?p/i)i] * ( p - p / i )i]?(p?p/i)%ppp

代碼實現

#include <cstdio> #define LL long long #define MAXN 3000005 int n, p; LL inv[MAXN]; int main() {scanf ( "%d %d", &n, &p );inv[1] = 1;printf ( "1\n" );for ( int i = 2;i <= n;i ++ ) {inv[i] = inv[p % i] * ( p - p / i ) % p;printf ( "%lld\n", inv[i] );}return 0; }

ok,讓我們隨著難度的增加慢慢深入,就先去養養?,體驗農村生活

曹沖養豬?(互質的中國剩余定理)

題目


題解

這道題,還好還好,麻痹自己,模板也是可以自己,慢慢看懂的,我就不多證明了,
主要是我懶得打了。。。

取模定理:兩數不能整除,若被除數擴大(或縮小)了幾倍,而除數不變,則其商和余數也同時擴大(或縮小)相同的倍數(余數必小于除數)。
如果a%b=c,那么如果x%b=c * 2,此時有x=a * 2;
轉化為求通解問題,即:
求解同余方程組
x≡ a1?(mod m1?)
x≡ a2?(mod m2?)
x≡ a3?(mod m3?)

x≡ ak?(mod mk?)?
其中m1,m2,m3…mk為兩兩互質的整數求x的最小非負整數解

M是輸入的所有m[i]的乘積,Ti是M/mi的逆元


接下來就是模板套上去就可以了,在這里我只想補充,int128是個好玩意兒啊!!

代碼實現

#include <cstdio> #define MAXN 15 #define LL __int128 int n; int m[MAXN], r[MAXN];void print ( LL x ) {if ( x > 9 )print ( x / 10 );putchar ( ( x % 10 ) + '0' ); }void exgcd ( LL a, LL b, int &x, int &y ) {if ( ! b ) {x = 1;y = 0;return;}exgcd ( b, a % b, y, x );y -= ( a / b ) * x; } int main() {scanf ( "%d", &n );for ( int i = 1;i <= n;i ++ )scanf ( "%d %d", &m[i], &r[i] );LL lcm = 1, ans = 0;int x, y;for ( int i = 1;i <= n;i ++ )lcm = lcm * m[i];for ( int i = 1;i <= n;i ++ ) {LL tp = lcm / m[i];exgcd ( tp, m[i], x, y );x = ( x % m[i] + m[i] ) % m[i];ans = ( ans % lcm + tp * r[i] % lcm * x % lcm ) % lcm;}LL res = ( ans % lcm + lcm ) % lcm;print ( res );return 0; }

Strange Way to Express Integers(不互質的中國剩余定理)

題目


題解

那么,當模數不兩兩互質
即求:
解同余方程組
x≡ a1?(mod m1?)
x≡ a2?(mod m2?)
x≡ a3?(mod m3?)…
x≡ ak?(mod mk?)?
其中m1,m2,m3…mk是不一定兩兩互質的整數求x的最小非負整數解
我們先考慮:只有兩個數該怎么處理
可以得到:
x=a1+k1?m1x=a1+k1*m1x=a1+k1?m1
x=a2+k2?m2x=a2+k2*m2x=a2+k2?m2
k2?m2?k1?m1=a1?a2k2*m2-k1*m1=a1-a2k2?m2?k1?m1=a1?a2
四不四很像 ax+by=cax+by=cax+by=c
設m1,m2的gcd為g,a1?a2=ca1-a2=ca1?a2=c
1)當c不是g的倍數時,exgcd無解
2)如果是,

則用exgcd求出k2?m2+(?k1)?m1=gcd(m1,m2)k2*m2+(-k1)*m1=gcd(m1,m2)k2?m2+(?k1)?m1=gcd(m1,m2)
因為c是g的倍數,兩邊同時乘以一個c/g,即k1乘上c/g得到
k2?m2+(?k1)?m1=c解為?k1k2*m2+(-k1)*m1=c解為-k1k2?m2+(?k1)?m1=c?k1

X=a1?k1?m1X=a1-k1*m1X=a1?k1?m1
這樣就求出了x。
我們設這個x為x0
所以,可以得到的通解為x=x0+k?lcm(m1,m2)x=x0+k*lcm(m1,m2)x=x0+k?lcm(m1,m2)

將這個方程轉化一下,可以得到一個新的同余方程
x=x0(modx=x0(modx=x0(mod lcm(m1,m2))lcm(m1,m2))lcm(m1,m2))

我們便成功的將兩個方程轉化為了一個方程
后面以此類推,得到最后一個x0,即為我們所需要的答案。

上模板講解?
M是上一次的最小公倍數lcm
R是上一次的x0,及我們的當前答案

R = a[1], M = m[1]; FOR(1~N) gcd = exgcd ( M, m[i], x, y ); //k2*m2+(-k1)*m1=gcd(m1,m2),這里M就是m1,m[i]就是m2,x,y是對應的k系數 c = R - a[i]; x = c / gcd * x % m[i]; //x此時就是k2*m2+(-k1)*m1=c中的-k1 R -= x * M; //更新新的X答案m,X=a1-k1*m1(如果是?,參照這個方程), //x=x0+k*lcm(m1,m2)(如果是?,參照這個方程) M = M / gcd * m[i]; //更新新的lcm R %= M;

代碼實現

#include <cstdio> #define MAXN 100005 #define LL long long int n; int m[MAXN], a[MAXN];LL exgcd ( LL a, LL b, LL &x, LL &y ) {if ( ! b ) {x = 1;y = 0;return a;}LL d = exgcd ( b, a % b, y, x );y -= ( a / b ) * x;return d; } LL gcd, R, M, x, y, c;int main() {while ( scanf ( "%d", &n ) != EOF ) {bool flag = 0;for ( int i = 1;i <= n;i ++ )scanf ( "%d %d", &m[i], &a[i] );R = a[1], M = m[1];for ( int i = 2;i <= n;i ++ ) {gcd = exgcd ( M, m[i], x, y );c = R - a[i];if ( c % gcd ) {flag = 1;printf ( "-1\n" );break;}x = c / gcd * x % ( m[i] / gcd );R -= x * M;M = M / gcd * m[i];R %= M;}if ( ! flag )printf ( "%lld\n", ( R % M + M ) % M );} return 0; }

好了,我已經被榨干了,去做其他的DP和數論了,ヾ( ̄▽ ̄)ByeBye

總結

以上是生活随笔為你收集整理的数论练习1 ( 曹冲养猪 + [POJ 2891]Strange Way to Express Integers + 乘法逆元【带证明】)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日日操夜夜骑 | 亚洲一区二区三区婷婷 | 国产免费叼嘿网站免费 | 99热超碰在线 | 国产手机在线 | 高级毛片| 岛国av一区二区 | 91女神在线 | 国内毛片毛片毛片毛片毛片 | 韩国主播青草200vip视频 | 在线观看视频 | 成人免费视频网站在线观看 | 国产主播福利在线 | 色一情一乱一乱一区91av | 亚洲精品欧美 | 欧美三区视频 | hitomi一区二区三区精品 | 影音先锋中文字幕第一页 | 亚洲av日韩av永久无码下载 | 一区二区麻豆 | 欧美a网 | 亚洲第一av网站 | 国产成人精品999在线观看 | 久久精品国产精品 | 亚洲最大激情网 | aa片在线观看视频在线播放 | 影音先锋中文字幕一区二区 | 午夜在线观看视频 | 落日余晖图片 | 美女让男生桶 | 婷婷开心激情网 | 国产另类ts人妖一区二区 | 黄色在线视频观看 | 日韩欧美视频网站 | 91精彩视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 熟女性饥渴一区二区三区 | 国产中出 | 日韩激情成人 | 精品人妻一区二区三区日产乱码卜 | 天天爽天天搞 | 在线xxxx| 香港三级在线视频 | 91喷水视频 | 久久av网址 | 成年人在线观看网站 | 亚洲一区二区三区久久 | 日韩av高清在线播放 | 法国性xxxx精品hd | 亚洲经典av | 特大黑人巨交性xxxx | 国产一区精品久久 | 国产精品极品白嫩在线 | 成人mv在线观看 | 欧美性xxxx | 天堂网久久| 欧美极品一区二区三区 | 久久婷婷伊人 | 亚洲av日韩av永久无码下载 | 精品久久久久久亚洲综合网站 | www.在线播放| 国产一级一片免费播放放a 丁香六月色 | 成人精品在线看 | 视频在线国产 | 视频在线播 | 老司机午夜性大片 | 国产精品mm | 国产做受麻豆动漫 | 空姐吹箫视频大全 | 国产肉体xxxx裸体784大胆 | 逼逼av网站| 痴女扩张宫交脱垂重口小说 | 欧美三级三级三级爽爽爽 | 久久久久亚洲精品系列色欲 | 91视频亚洲 | wwwwxxxx欧美 | 亚洲国产一区二区在线 | 亚洲一区二区三区激情 | 老妇女av | 欧美日韩激情一区二区 | 精品+无码+在线观看 | 青青草成人在线 | 超碰在线a | 蜜桃视频久久一区免费观看入口 | 久久久久久久久福利 | 成人黄色一级片 | 性欧美丰满熟妇xxxx性久久久 | 成人免费视频国产免费 | 欧美男优| 精品人妻一区二区乱码 | 亚洲av成人无码一区二区三区在线观看 | 亚洲午夜精品一区二区三区 | 精品婷婷| 成人国产精品久久久网站 | 激情六月综合 | 日韩亚洲在线观看 | 国产又粗又黄又爽的视频 | 久久黄色一级视频 | 伊人免费在线观看高清版 |