韩信点兵-中国剩余定理(练习)
http://acm.nyist.net/JudgeOnline/problem.php?pid=34提交地址
韓信點(diǎn)兵-中國(guó)剩余定理。
題目能夠用枚舉非常easy的做出來(lái),在這里寫是為了運(yùn)用一下剛剛學(xué)習(xí)的中國(guó)剩余定理。
曾經(jīng)寫過(guò)中國(guó)剩余定理的博客在這就不多說(shuō)了。
假設(shè)以下的字母看不懂請(qǐng)看我的還有一篇博客http://blog.csdn.net/u010123208/article/details/24314627
說(shuō)一說(shuō)思路吧。
1.首先我們要用數(shù)組存儲(chǔ)我們的要的除數(shù)。和余數(shù)。
我們用m[]來(lái)存儲(chǔ),余數(shù)我們用a[]來(lái)存儲(chǔ)。
2.接下來(lái)我們要計(jì)算M了 ,然后是mi mi的值我用mm[]來(lái)存儲(chǔ)的。
3.如今基本的任我就是計(jì)算mi的逆元了。
計(jì)算逆元我們當(dāng)然要用擴(kuò)展歐幾里得定理了。注意在用擴(kuò)展歐幾里得定理的時(shí)候我們會(huì)遇到這種問(wèn)題,返回的結(jié)果是個(gè)負(fù)數(shù)。舉個(gè)樣例就是 m1的逆元 ?mm[1]x + m[1]y = 1;返回x=-1,y=12,這個(gè)但是這不是我們想要的數(shù)值。我們能夠用m[1]+x = 2; mm[1]-y=23;(這個(gè)結(jié)論是我在群里問(wèn)他們,他們說(shuō)自己計(jì)算一下。詳細(xì)的也沒(méi)說(shuō)。我就突然想到這樣來(lái)計(jì)算試試,結(jié)果真行。我又試了幾個(gè),也行,這詳細(xì)如何我也不知道。希望有看到博客對(duì)擴(kuò)展歐幾里得定理比較清楚的給我留下言,我請(qǐng)教一下。在這謝謝了)。
4 我們須要的東西都已經(jīng)求出來(lái)了。我們就能夠計(jì)算結(jié)果了。(假設(shè)不知道請(qǐng)看我的還有一篇博客中介紹的)
以下貼出代碼,代碼僅僅是為了練習(xí)而已,對(duì)于上面的題目而言,提交肯定會(huì)錯(cuò)的,由于。。
。可是僅僅對(duì)于我們的中國(guó)剩余定理來(lái)時(shí)是正確的。
#include<iostream> using namespace std; int exgcd(int i,int j,int &ansx,int &ansy) //擴(kuò)展歐幾里得定理 { int d = i; if(j==0) { ansx=1; ansy=0; return d; } d=exgcd(j,i%j,ansx,ansy); int temp = ansx; ansx=ansy; ansy=temp-(i/j)*ansy; return d; } int main() {int a[4];//余數(shù)for(int i=1;i<4;i++)cin>>a[i];int m[4]={0,3,5,7};//取模的數(shù) 質(zhì)數(shù)int mm[4]={0,35,21,15};int t[4];//逆元for(int i=1;i<4;i++){int x,y;exgcd(mm[i],m[i],x,y);if(x<0)x=m[i]+x;t[i]=x;}int sum=0;for(int i=1;i<4;i++){sum=sum+t[i]*a[i]*mm[i];}cout<<sum%105<<endl;system("pause"); }好了!
感謝自己堅(jiān)持。
轉(zhuǎn)載于:https://www.cnblogs.com/mengfanrong/p/5186838.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的韩信点兵-中国剩余定理(练习)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【GDAL】聊聊GDAL的数据模型(二)
- 下一篇: 熟悉HTML CSS布局模型