• 洛谷 P1082 [NOIP2012 提高组] 同余方程(exgcd)


    传送门


    发现自己数论+文化课数学都已经炸了,所以从头学起补一补,以后要多刷数论题了。

    解题思路

    (axequiv 1pmod{b})
    可以转换成 (ax+by=1)
    而答案就是这个方程的解中x的最小正整数解。
    直接用exgcd算出一组解(x_0),然后想办法得到x的最小正整数。
    我们回到题目:

    输入数据保证一定有解

    怎么保证的?
    根据裴蜀定理可以得出,1是a和b的gcd的倍数。
    很显然,1就是a和b的gcd,即ab互质。
    我们把(x_0)%b,一定也满足条件,所以最终答案就是 ((x_0)%b+b)%b,(防止负数)

    AC代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<ctime>
    using namespace std;
    long long a,b,x,y;
    void exgcd(int a,int b){
    	if(b==0){
    		x=1;
    		y=0;
    		return;
    	}
    	exgcd(b,a%b);
    	swap(x,y);
    	y=y-a/b*x;
    }
    int main(){
    	cin>>a>>b;
    	exgcd(a,b);
    	cout<<(x%b+b)%b;
    	return 0;
    }
    

    markdown我爱了
    //NOIP2012 day2t1

  • 相关阅读:
    文件操作3
    文件操作2
    kubernetes快速应用入门
    kubeadm初始化kubernetes集群
    kubernetes基础概念
    变量
    字面值
    关键字
    标识符
    Ubuntu安装MySql5.7
  • 原文地址:https://www.cnblogs.com/yinyuqin/p/14747655.html
Copyright © 2020-2023  润新知