C++——拓展欧几里得模板——同余方程【NOIP2012提高组】
2017-01-18 16:20
447 查看
同余方程
题目背景
NOIP2012 提高组 DAY2 试题。
题目描述
求关于 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
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
long long a,b,x,y;
long long gcd(long long a,long long b,long long &x,long long &y)
{
if(a<b) swap(a,b);
if(b==0)
{
x=1;
y=0;
return a;
}
long long ret=gcd(b,a%b,x,y);
long long temp=x;
x=y;
y=temp-a/b*y;
return ret;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cin>>a>>b;
gcd(a,b,x,y);
if(a*x+b*y==1)
cout<<(x%b+b)%b<<endl;
else
cout<<(y%b+b)%b<<endl;
return 0;
}
相关文章推荐
- 扩展欧几里得模板(洛谷1082 同余方程NOIP 2012 提高组 第二天 第一题)
- LuoguP1082[NOIP2012] 同余方程 解题报告【拓展欧几里得】
- 【codevs 1200】【NOIP 2012】同余方程 拓展欧几里德求乘法逆元模板题
- codevs1200 同余方程 (2012年NOIP全国联赛提高组)拓展欧几里得
- [复习][NOIP2012真题]拓展欧几里得 同余方程
- [NOIP 2012] 同余方程 · 拓展欧几里得
- [NOIP 2012] 同余方程 · 拓展欧几里得
- 【扩展欧几里得】Codevs 1200: [noip2012]同余方程
- NOIP2012复赛提高组day2(A:同余方程 B:借教室 C:疫情控制)
- 【扩展欧几里得】NOIP2012同余方程
- 【扩展欧几里得】Codevs 1200: [noip2012]同余方程
- Noip2012 Day2 T1 同余方程(扩展欧几里得)
- 【NOIP2012】洛谷1082 同余方程 扩展欧几里得详解
- [NOIP2012] 提高组 洛谷P1082 同余方程
- NOIP提高组 2012 同余方程
- 扩展欧几里得详解 NOIP2012同余方程 青蛙的约会
- 【NOIP】提高组2012 同余方程
- NOIP 2012 提高组 复赛 day2 mod 同余方程
- [NOIp2012提高组]同余方程
- 【NOIP2012提高组】同余方程 (扩展欧几里得算法)