zoukankan      html  css  js  c++  java
  • 洛谷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.  
  • 相关阅读:
    python 安装第三方插件库报错的解决方案
    vue.js helloword
    node.js HelloWord
    十一 —— 迭代器、生成器、装饰器
    十、函数——匿名函数、推导式
    九、函数 —— 参数
    八、数据类型——bytes类型+set类型
    七、数据类型 —— 字典
    六、数据类型 —— 字符串
    五、数据类型 —— 元组
  • 原文地址:https://www.cnblogs.com/wuminyan/p/4746744.html
Copyright © 2011-2022 走看看