NOIP2012同余方程[exgcd]

题目描述

求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解。

输入输出格式

输入格式:

输入只有一行,包含两个正整数 a, b,用一个空格隔开

输出格式:

输出只有一行,包含一个正整数 x0,即最小正整数解。输入数据保证一定有解。

输入输出样例

输入样例#1:

3 10

输出样例#1:

7

说明

【数据范围】

对于 40%的数据,2 ≤b≤ 1,000;

对于 60%的数据,2 ≤b≤ 50,000,000;

对于 100%的数据,2 ≤a, b≤ 2,000,000,000。

------------------------------------------------------------------------

这也太明显了

#include<iostream>
using namespace std;
typedef long long ll;

ll a,b,x,y,d;
void exgcd(ll a,ll b,ll &d,ll &x,ll &y){
    if(b==0) {d=a;x=1;y=0;}
    else{exgcd(b,a%b,d,y,x);y-=(a/b)*x;}
}

int main(){
    cin>>a>>b;
    exgcd(a,b,d,x,y);
    cout<<(x+b)%b;
}
时间: 2024-10-14 23:30:46

NOIP2012同余方程[exgcd]的相关文章

洛谷P1082/NOIP2012 同余方程

洛谷P1082/NOIP2012 同余方程 题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 输入输出样例 输入样例#1: 复制 3 10 输出样例#1: 复制 7 说明 [数据范围] 对于 40%的数据,2 ≤b≤ 1,000: 对于 60%的数据,2 ≤b≤ 50,000,000: 对于 10

NOIP2012同余方程

描述 求关于 x的同余方程  ax ≡ 1(mod b) 的最小正整数解. 输入格式 输入文件 mod.in输入只有一行,包含两个正整数a,b,用一个空格隔开. 输出格式 输出文件 为 modmod .out .输出只有一行,包含一个正整数,包含一个正整数 ,包含一个正整数 x0,即最小正整数解. 输入据保证一定有解. 测试样例1 输入 3 10 输出 7 备注 对于 40% 的数据    2 ≤b≤1,000对于 60% 的数据    2 ≤b≤50,000,000对于 100%的数据    

【codevs1200】 NOIP2012—同余方程

codevs.cn/problem/1200/ (题目链接) 题意:求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. Solution    这道题其实就是求a mod b的逆元x.所谓逆元其实很简单,记a的关于模p的逆 元为a^-1,则a^-1满足aa^-1≡ 1(mod p),用扩展欧几里德即可.  关于扩展欧几里德,有博客写了证明:blog.csdn.net/lincifer/article/details/49391175   代码: // codevs1200 #i

COGS——T 1265. [NOIP2012] 同余方程

http://cogs.pro/cogs/problem/problem.php?pid=1265 ★☆   输入文件:mod.in   输出文件:mod.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. [输入格式] 输入只有一行,包含两个正整数 a, b,用一个空格隔开. [输出格式] 输出只有一行,包含一个正整数X0,即最小正整数解.输入数据保证一定有解. [样例输入] 3 10 [样例输出

回档|NOIP2012 同余方程

题目描述 Description 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 Input/output 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 输入:3 7 输出:10 题解:这道题我们先要看懂题意.题目的意思就是ax mod b=1,也就是ax-kb=1.考虑扩展的欧几里得定理.显然y可以是一个负值,我们的目的就是求一个最小的正整数x,让

[NOIP2012] 同余方程

题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入 输入文件为 mod.in.输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出 输出文件为 mod.out.输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 样例输入 3 10 样例输出 7 提示 [数据范围] 对于 40%的数据,2 ≤b≤ 1,000: 对于 60%的数据,2 ≤b≤ 50,000,000: 对于 100%的数据,2 ≤a, b≤ 2,000,000,00

NOIP2012 同余方程 题解

描写叙述 求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解. 格式 输入格式 输入仅仅有一行,包括两个正整数a, b,用一个空格隔开. 输出格式 输出仅仅有一行,包括一个正整数x0.即最小正整数解. 输入数据保证一定有解. 例子1 例子输入1[复制] 3 10 例子输出1[复制] 7 限制 每一个測试点1s 提示 对于40%的数据,2 ≤b≤ 1,000: 对于60%的数据,2 ≤b≤ 50,000,000: 对于100%的数据,2 ≤a, b≤ 2,000,000,000. 分析:

exgcd

exgcd 解决的问题: 求出a*x+b*y=c(a,b,c为常量)的一组解,时间复杂度log(a) 首先先做一个证明 a*x+b*y=c 有整数解的充要条件是c整除gcd(a,b) 设gcd(a,b)=p 1.充分性: a*x+b*y=c a'*p*x+b'*p*y=c(a'=a/p) p(a'*x+b'*y)=c; 因为x,y必须为整数 所以c必须整除p 2.必要性 使用欧几里得和数学归纳法可证明 首先b*x1+(a%b)*y1=c,有整数解,则a*x2+b*y2=c有整数解 a*x2+b*

noip2012~2015刷题小记录

2012d1t1 密码 模拟题 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<cmath> 5 #include<iostream> 6 #include<algorithm> 7 #include<set> 8 #include<queue> 9 #include<vector> 10 using nam