您的位置:首页 > 其它

NOIP2012 同余方程 题解

2015-08-13 17:27 357 查看


描述

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


格式

输入格式

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

输出格式

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


样例1

样例输入1[复制]

3 10


样例输出1[复制]

7



限制

每个测试点1s


提示

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

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

对于100%的数据,2 ≤a, b≤ 2,000,000,000。
分析:
解同余方程,比较水
欧几里德算法
program mod1;

var

a,b,x,y:longint;

procedure gcd(a,b:longint);

var t:longint;

begin

if b<>0

then gcd(b,a mod b)

else begin

x:=1;

y:=0;

exit;

end;

t:=x;

x:=y;

y:=t-(a div b)*y;

end;

begin

readln(a,b);

gcd(a,b);

//writeln(x,' ',y);

writeln(((x mod b)+b)mod b);

end.

代码二:
program mod2;

procedure oujilide(a,b:int64;var d,x,y:int64);

begin

  if b=0 then

  begin

  d:=a;

  x:=1;

  y:=0;

  end

  else

  begin

  oujilide(b,a mod b,d,y,x);

  y:=y-x*(a div b);end;

end;

var

  a,b,d,x,y:int64;

begin

  assign(input,'mod.in');

  reset(input);

  assign(output,'mod.out');

  rewrite(output);

  readln(a,b);

  oujilide(a,b,d,x,y);

  while x<0 do

  x:=x+b;

  writeln(x);

  close(input);

  close(output);

  end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息