zoukankan      html  css  js  c++  java
  • 扩展欧几里得算法解同余方程(NOIP2012)

    同余方程
    (mod.cpp/c/pas)
    【问题描述】
    求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解。
    【输入】
    输入文件为 mod.in。
    输入只有一行,包含两个正整数 a, b,用一个空格隔开。
    【输出】
    输出文件为 mod.out。
    输出只有一行,包含一个正整数 x 0 ,即最小正整数解。输入数据保证一定有解。
    【输入输出样例】
    mod.in 
    3 10
    mod.out
    7
    【数据范围】
    对于 40%的数据,2 ≤b≤ 1,000;
    对于 60%的数据,2 ≤b≤ 50,000,000;
    对于 100%的数据,2 ≤a, b≤ 2,000,000,000。
    
    #include <iostream>
    #define ll long long
    using namespace std;
    ll a,b,x,y;
    ll extended_gcd(ll  a,ll b,ll &x,ll &y)
    {
        if (!b) { 
        	x=1; 
        	y=0; 
        	return a; 
        }
        else { 
        	ll ans=extended_gcd(b,a%b,x,y); 
            ll t=x; x=y; y=t-(a/b)*y;
            return ans;
        }
    }
    int main()
    {
        cin>>a>>b;
        ll ans = extended_gcd(a, b, x, y);
    
        if (ans!=1) cout<<"No answer"<<endl;
        else
        {
            x=x%b;
            while (x<0) x+=b;
            cout <<x<<endl;
        }
        return 0;
    }
    
    // 3 10


  • 相关阅读:
    UML_04_时序图
    UML_03_类图
    UML_02_概述
    UML_00_资源帖
    UML_01_画图工具
    SpringCloud_00_资源帖
    Idea_03_常用快捷键
    Idea_02_常用配置
    Idea_01_安装与激活
    Codeforces命令行工具
  • 原文地址:https://www.cnblogs.com/cnyali/p/4163907.html
Copyright © 2011-2022 走看看