zoukankan      html  css  js  c++  java
  • [NOIP2012]同余方程

    【NOIP 2012 提高组 第二天 第一题】

    【题目描述】

    求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解。

    【输入输出格式】

    输入格式:

    输入只有一行,包含两个正整数 a, b,用一个空格隔开。

    输出格式:

    输出只有一行,包含一个正整数 x0,即最小正整数解。输入数据保证一定有解。

    【输入输出样例】

    输入样例#1:

    3 10

    输出样例#1:

    7

    【说明】

    对于 40%的数据,2 ≤b≤ 1,000; 
    对于 60%的数据,2 ≤b≤ 50,000,000; 

    对于 100%的数据,2 ≤a, b≤ 2,000,000,000。 

    【思路&知识补充

    ax ≡ 1 (mod b)

    可以写成

    ax+by=1

    运用扩展欧几里得算法,求出一组解。根据所有解的规律:

    x加上b/gcd(a,b),同时y减去a/gcd(a,b)后,仍满足ax+by=c。

    求出x的最小正整数解。

    var a,b,c,x,y:longint;
    
    function gcd(a,b:Longint; var x,y:Longint):longint;//扩展欧几里得定理
    var t:longint;
    begin
        if b=0 then//当b=0时退出,此时a为最大公约数
        begin
            x:=1;
            y:=0;
            exit(a);
        end;
        gcd:=gcd(b,a mod b,x,y);
        t:=x;
        x:=y;
        y:=t-(a div b)*y;
    end;
    
    begin
        read(a,b);
        c:=gcd(a,b,x,y);
        while (x-(b div c)>0) do x:=x-b div c;
        //判断x大小,如果比0大即减(b div c),此时y+(a div c)得数相等
        if x<0 then while x<0 do x:=x+(b div c);
        //判断x小于零,同理加(b div c)
        writeln(x);
    end.
  • 相关阅读:
    Python os 模块
    Python sys 模块
    [SAP BASIS]How to kill process in SAP ?
    linux lsof 详解
    [ORACLE] Oracle 索引失效总结
    [SAP BASIS] [TMS] 更改 Backup-Domain-Controler as Domain Controller|将TMS备用域控制器改为主域控制器
    python 生产者消费者模型
    Python 多线程
    python queue 模块
    [Linux]ipcs,ipcm 命令详解
  • 原文地址:https://www.cnblogs.com/yangqingli/p/4709254.html
Copyright © 2011-2022 走看看