1. 程式人生 > >同餘方程(擴充套件歐幾里得)

同餘方程(擴充套件歐幾里得)

#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