• 洛谷1082 同余方程


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

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

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

    样例输入 Sample Input
    3 10

    样例输出 Sample Output
    7

    数据范围及提示 Data Size & Hint
    【数据范围】
    对于 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,然后通过扩展欧几里得定理即可求得。

    你问我什么事扩展欧几里得。。。我很难解释清楚,大概就是辗转相除的加强版,函数格式如代码所示

     1 program tyfc;  
     2 var a,b,c,x,y:int64;  
     3 function gcd(a,b:int64; var x,y:int64):int64;//扩展欧几里得定理即为该函数,背过即可  
     4 var t:longint;  
     5 begin  
     6     if b=0 then//当b=0时退出,此时a为最大公约数  
     7     begin  
     8         x:=1;  
     9         y:=0;  
    10         exit(a);  
    11     end;  
    12     gcd:=gcd(b,a mod b,x,y);  
    13     t:=x;  
    14     x:=y;  
    15     y:=t-(a div b)*y;  
    16 end;  
    17   
    18 begin  
    19     read(a,b);  
    20     c:=gcd(a,b,x,y);  
    21     while (x-(b div c)>0) do//判断x大小,如果比0大即减(b div c),此时y+(a div c)得数相等  
    22     x:=x-b div c;  
    23     if x<0 then//判断x小于零,同理加(b div c)  
    24     while x<0 do  
    25     begin  
    26         x:=x+(b div c);  
    27     end;  
    28     writeln(x);  
    29 end.  
  • 相关阅读:
    家庭作业有益吗?
    视图、触发器、事务、存储过程、函数
    Navicat使用和pymysql
    表查询
    外键
    MySQL表操作
    进程池线程池、协程
    全局解释器锁及其他用法
    线程
    进程
  • 原文地址:https://www.cnblogs.com/wuminyan/p/4746744.html
Copyright © 2020-2023  润新知