数论 —— 线性同余方程
生活随笔
收集整理的這篇文章主要介紹了
数论 —— 线性同余方程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【概念】
1.不定方程:未知數的個數多于方程個數,且未知數受到某些限制(如要求是整數)的方程。
2.同余方程
設函數?,則稱:是關于模 m 的同余方程
3.線性:方程的未知數次數是一次
4.線性同余方程
線性同余方程是最基本的同余方程,形如??的未知數是 x 的同余式,其中,a、b 是整數,且?
【與線性同余方程有關的定理】
1.定理1:對于二元一次方程??,其等價為?,該方程有整數解的充分條件是?,若方程有整數解,則共有??個解。
2.定理2:若??、?為??的一組解,則該方程的任一解可表示為:
注意,上面兩個通解公式只能選擇其中一個,另一個再根據原方程推出。
3.定理3:若?,則方程??在??上有唯一解。
【線性同余方程的解的求法】
1.使用擴展歐幾里德算法求方程的一組解
根據定理1,對于方程??,用擴展歐幾里德算法求出一組?、,即令?,然后兩邊同除??,再乘以 c ,即得方程??,因此可知方程的一組解?
2.實際應用
實際中,常常被要求去求最小的正整數的解,先通過擴展歐幾里德算法求出方程的一組?、,再設??,通過定理2來拓展方程的解,來調整x的范圍,將??拓展為??,從而使得所得到的 x 盡可能的小,通過式子??來約束結果一定是一個正數,最后所得到的 x 即是一個最小的正整數解。?
【模版】
#include<iostream> using namespace std; int Extended_GCD(int a,int b,int &x,int &y) {if(b==0){x=1;y=0;return a;}int temp;int gcd=Extended_GCD(b,a%b,y,x);y-=x*(a/b);return gcd; } int main() {//形如 ax+by=cint a,b,c,x,y;cin>>a>>b>>c;int gcd=Extended_GCD(a,b,x,y);if(c%gcd!=0)cout<<"無整數解"<<endl;elsecout<<"該方程的一組整數解為:x="<<x*c/gcd<<",y="<<y*c/gcd<<endl;return 0; }【例題】
- 青蛙的約會(POJ-1061)(擴展歐幾里得):點擊這里
同題:青蛙的約會(洛谷-P1516):點擊這里 - The Balance(POJ-2142)(線性同余方程):點擊這里
- C Looooops(POJ-2115)(線性同余方程):點擊這里
總結
以上是生活随笔為你收集整理的数论 —— 线性同余方程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分成互质组 (信息学奥赛一本通-T122
- 下一篇: 鸡蛋的硬度(信息学奥赛一本通-T1300