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

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

題目描述

求關於 x 的同餘方程 ax ≡ 1 (mod b)的最小正整數解。

輸入輸出格式

輸入格式:

輸入只有一行,包含兩個正整數 a, b,用一個空格隔開。

輸出格式:

輸出只有一行,包含一個正整數 x0,即最小正整數解。輸入資料保證一定有解。

輸入輸出樣例

輸入輸出樣例#1:
3 10

7

說明

【資料範圍】

對於 40%的資料,2 ≤b≤ 1,000;

對於 60%的資料,2 ≤b≤ 50,000,000;

對於 100%的資料,2 ≤a, b≤ 2,000,000,000。

思路

一道純粹的數論題

因為 %b 等價於 +by

所以ax%b=1等價於 ax+by=1

現在我們就可以看出來這就一道擴歐的題目

#include<cstdio>
#include<iostream>
using namespace std;
int a,b,x,y;
int gcd(int a,int b,int &x,int &y)
{
    if(!b)
    {
        x=1,y=0;
        return a;
    }
    int s=gcd(b,a%b,x,y);
    int mid=x; x=y;
    y=mid-((a/b)*y);
    return s;
}
int main()
{
    scanf("%d%d",&a,&b);
    gcd(a,b,x,y);
    printf
("%d\n",(x+b)%b);//因為可能會出現負數 return 0; }

相關推薦

Noip2012 Day2 T1 方程擴充套件

題目描述 求關於 x 的同餘方程 ax ≡ 1 (mod b)的最小正整數解。 輸入輸出格式 輸入格式: 輸入只有一行,包含兩個正整數 a, b,用一個空格隔開。 輸出格式: 輸出只有一行,包含一個正整數 x0,即最小正整數解。輸入資料保

方程擴充套件

#include<cstdio> using namespace std; int x,y; int gcd(int a,int b,int &x,int &y){

方程擴充套件德演算法

同餘方程 時間限制: 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星球相當遙遠,科學家們要在飛船中度過相當長的一段時間,小聯提議用撲克牌打發長途旅行中的無聊時間。玩了幾局之後,大家覺得單純玩撲克牌對於像他們這樣的高智商人才來說太簡單了。有人提出了撲克牌

p1434 [noip2012]day2-T1方程

題目 https://www.luogu.org/problemnew/show/P1082 程式碼 #include<bits/stdc++.h> using namespace std; typedef long long ll; ll a, b, x, y;

poj 1061青蛙的約會擴充套件+方程

兩隻青蛙在網上相識了,它們聊得很開心,於是覺得很有必要見一面。它們很高興地發現它們住在同一條緯度線上,於是它們約定各自朝西跳,直到碰面為止。可是它們出發之前忘記了一件很重要的事情,既沒有問清楚對方的特徵,也沒有約定見面的具體位置。不過青蛙們都是很樂觀的,它們覺得只要一直朝

ZOJ ~ 3593 ~ One Person Game 擴充套件,不定方程

題意 你要從A走到B,你每次可以走a步,b步,a+b步問最小需要走多少步?無法到達輸出 -1。 題解 先不考慮a+b步的情況,那麼我們要求解的就是:,如果,證明無解。 假設原方程一組解為x0,y0,那麼通解(x,y)為:,。 其實也就是兩條直線:, 取一條平行於

Wannafly summer camp Day2  ——Utawarerumono數論擴充套件

9511: Utawarerumono 時間限制: 1 Sec  記憶體限制: 128 MB 提交: 389  解決: 66 [提交] [狀態] [討論版] [命題人:admin] 題目描述 算術是為數不多的會讓久遠感到棘手的事情。通常她會找哈克幫忙,但是哈克已經被

C. Line擴充套件求不定方程的解

time limit per test 1 second memory limit per test 256 megabytes input standard input outp

青蛙的約會擴充套件演算法+不定方程求解

1.折磨了我好久,不過大概是懂了。 2.題目: 兩隻青蛙在網上相識了,它們聊得很開心,於是覺得很有必要見一面。它們很高興地發現它們住在同一條緯度線上,於是它們約定各自朝西跳,直到碰面