首页 > 代码库 > vijos1781 同余方程
vijos1781 同余方程
描述
求关于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。
来源
Noip2012提高组复赛Day2T1
又是复习题……练练exgcd
感觉这么水的题发上去显得我很没有水平
算了……反正我也确实没水平
#include<cstdio>#include<iostream>#include<cstring>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<deque>#include<set>#include<map>#include<ctime>#define LL long long#define inf 0x7ffffff#define pa pair<int,int>#define pi 3.1415926535897932384626433832795028841971using namespace std;inline LL read(){ LL x=0,f=1;char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();} return x*f;}int a,b,x,y;inline int gcd(int a,int b){ if (!b)return a; return gcd(b,a%b);}inline void exgcd(int a,int b,int &x,int &y){ if (!b){x=1;y=0;return;} exgcd(b,a%b,x,y); int t=x;x=y;y=t-a/b*y;}int main(){ a=read();b=read(); exgcd(a,b,x,y); x=(x%b+b)%b; printf("%d\n",x);}
vijos1781 同余方程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。