C++——拓展欧几里得模板——同余方程【NOIP2012提高组】

来源:互联网 发布:只有知我能看广播剧 编辑:程序博客网 时间:2024/06/06 16:52

同余方程

题目背景

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;elsecout<<(y%b+b)%b<<endl;return 0;}



0 0
原创粉丝点击