同餘方程(擴充套件歐幾里得)
#include<cstdio>
using namespace std;
int x,y;
int gcd(int a,int b,int &x,int &y){
if(!b){
x=1,y=0;
return a;
}
int ret=gcd(b,a%b,x,y);
int t=x;
x=y;
y=t-a/b*y;
return ret;
}
int a,b;
int main(){
scanf("%d%d",&a,&b);
gcd(a,b,x,y );
printf("%d",(x+b)%b);
}
複製程式碼
歐幾里得gcd(a,b)=gcd(b,a%b)=......
因為ax≡1(mod b) -》ax%b=1%b=1
所以ax+by=1,因為y是整數所以加個by就相當於%b(因為%b的本質是+上y個b),所以兩個式子等價
由擴充套件歐幾里得得 ax+by=gcd(a,b)=gcd(b,a%b)=bx+(a%b=a-a/b*b)*y=....(x,0)=x。(x是最大公約數,/是整除)
最後bx=b,(a%b)*y=0
所以得 x=1,y=0
因此遞迴就行了
x2=y1,y2=x1-a/b*y1(原x-整除的數*a/b=模數)
最後得到的是無數解中的一種,有可能是負的,只需要加上模數就行了
相關推薦
同餘方程(擴充套件歐幾里得)
#include<cstdio> using namespace std; int x,y; int gcd(int a,int b,int &x,int &y){
Noip2012 Day2 T1 同餘方程(擴充套件歐幾里得)
題目描述 求關於 x 的同餘方程 ax ≡ 1 (mod b)的最小正整數解。 輸入輸出格式 輸入格式: 輸入只有一行,包含兩個正整數 a, b,用一個空格隔開。 輸出格式: 輸出只有一行,包含一個正整數 x0,即最小正整數解。輸入資料保
同餘方程(擴充套件歐幾里德演算法)
同餘方程 時間限制: 1 Sec 記憶體限制: 128 MB 題目描述 求關於 x 的同餘方程 ax ≡ 1 (mod b)的最小正整數解。 輸入 輸入只有一行,包含兩個正整數 a, b,用一個空格隔開。 輸出 輸出只有一行,包含
CHOJ 3301同餘方程【擴充套件歐幾里得】
描述 求關於 x的同餘方程 ax ≡ 1(mod b) 的最小正整數解。 輸入格式 輸入只有一行,包含兩個正整數a,b,用一個空格隔開。 輸出格式 輸出只有一行,包含一個正整數,包含一個正整
同餘_線性同餘方程_擴充套件歐幾里得演算法_CH3301
點此開啟題目頁面 思路分析: 利用擴充套件歐幾里得演算法解線性同餘方程即可, 給出如下AC程式碼: //CH3301_同餘方程 #include <iostream> using namespace std; int exgcd(int a,
一次同餘式的求解(擴充套件歐幾里得)
大佬的解釋 題目連結 一次同餘式a*x%n=b的解的存在條件是b整除gcd(a,n)。 #include<cstdio> #include<cstring> #includ
(數論)整數二元一次不定方程(擴充套件歐幾里得求解)
問題:形如a*x+b*y=c(a,b均不為0)的方程,a,b,c都是整數,求(x,y)整數解。 判斷是否有解 整數二元一次方程有解的充要條件是gcd(a,b)|c。如果不能整除則無解。 擴充套件歐幾里得演算法 歐幾里得演算法就是求出a*x+b*y=g
qdu 2017級納新題(擴充套件歐幾里得)
在你面前撒個嬌 哎呦喵喵喵喵喵 Description 我們一起學貓叫 一起喵喵喵喵喵 在你面前撒個嬌 哎呦喵喵喵喵喵 我的心臟砰砰跳 迷戀上你的壞笑 你不說愛我我就喵喵喵 每當xjy和hqy一起唱起這首歌時,就會吸引好多貓群來聽歌,這天他們又吸
POJ ~ 1061 ~ 青蛙的約會 (擴充套件歐幾里得)
題解 假設答案為a,其實就是求解:,化為。 對應到中,a = m-n,b = L, c = y-x。x為a,y為k。要求最小的非負整數x。 假設的一組解為(x0,y0),那麼通解為 所以最小
POJ ~ 2115 ~ C Looooops (擴充套件歐幾里得)
題解 設答案為x,由題意得,同餘方程 => 。 然後求得最小的非負整數解 x 就是答案。 //#include<bits/stdc++.h> #include<iost
ZOJ-3593 One Person Game(擴充套件歐幾里得)
題意 座標軸上,一個人想從 AA 點走到 BB 點,每次移動可以向左或向右走 aa 個單位、 bb 個單位或 a+ba+b 個單位,求最少移動多少次。 −231≤A,B<231−231≤A,B
乘法逆元(擴充套件歐幾里得)
下面是乘法逆元的一個演算法 #define low16(x) ((x) & 0xFFFF) static unsigned short MulInv(unsigned short x) { u
hdu 1576 A/B(擴充套件歐幾里得)
思路:設(A/B)%9973 = K, 則A/B = k + 9973x (x未知), 因此A = kB + 9973xB, 又A%9973 = n, 所以kB%9973 = n, 故kB = n + 9973y (y未知) 故(k/n)B +(-y/n)*9973 =
洛谷P2054(擴充套件歐幾里得)
題目描述為了表彰小聯為Samuel星球的探險所做出的貢獻,小聯被邀請參加Samuel星球近距離載人探險活動。由於Samuel星球相當遙遠,科學家們要在飛船中度過相當長的一段時間,小聯提議用撲克牌打發長途旅行中的無聊時間。玩了幾局之後,大家覺得單純玩撲克牌對於像他們這樣的高智商人才來說太簡單了。有人提出了撲克牌
poj 1061青蛙的約會(擴充套件歐幾里得+同餘方程)
兩隻青蛙在網上相識了,它們聊得很開心,於是覺得很有必要見一面。它們很高興地發現它們住在同一條緯度線上,於是它們約定各自朝西跳,直到碰面為止。可是它們出發之前忘記了一件很重要的事情,既沒有問清楚對方的特徵,也沒有約定見面的具體位置。不過青蛙們都是很樂觀的,它們覺得只要一直朝
ZOJ ~ 3593 ~ One Person Game (擴充套件歐幾里得,不定方程)
題意 你要從A走到B,你每次可以走a步,b步,a+b步問最小需要走多少步?無法到達輸出 -1。 題解 先不考慮a+b步的情況,那麼我們要求解的就是:,如果,證明無解。 假設原方程一組解為x0,y0,那麼通解(x,y)為:,。 其實也就是兩條直線:, 取一條平行於
C. Line(擴充套件歐幾里得求不定方程的解)
time limit per test 1 second memory limit per test 256 megabytes input standard input outp
青蛙的約會(擴充套件歐幾里得演算法+不定方程求解)
1.折磨了我好久,不過大概是懂了。 2.題目: 兩隻青蛙在網上相識了,它們聊得很開心,於是覺得很有必要見一面。它們很高興地發現它們住在同一條緯度線上,於是它們約定各自朝西跳,直到碰面
數論(擴充套件歐幾里得求方程整數解)
A - Solutions to an Equation You have to find the number of solutions of the following equation: Ax + By + C = 0 Where A, B, C, x, y
51Nod 1119 機器人走方格 (擴充套件歐幾里得+逆元+求組合數)
M * N的方格,一個機器人從左上走到右下,只能向右或向下走。有多少種不同的走法?由於方法數量可能很大,只需要輸出Mod 10^9 + 7的結果。 收起 輸入 第1行,2個數M,N,中間用空格隔開。(2 <= m,n <= 1000000) 輸出 輸出走法的數量 Mo