NOIP2012 同余方程 题解

描写叙述

求关于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.

时间: 2024-10-27 18:51:18

NOIP2012 同余方程 题解的相关文章

洛谷P1082/NOIP2012 同余方程

洛谷P1082/NOIP2012 同余方程 题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 输入输出样例 输入样例#1: 复制 3 10 输出样例#1: 复制 7 说明 [数据范围] 对于 40%的数据,2 ≤b≤ 1,000: 对于 60%的数据,2 ≤b≤ 50,000,000: 对于 10

洛谷 P1082 同余方程 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1082 题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 输入输出样例 输入样例#1: 3 10 输出样例#1: 7 说明 [数据范围]

回档|NOIP2012 同余方程

题目描述 Description 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 Input/output 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 输入:3 7 输出:10 题解:这道题我们先要看懂题意.题目的意思就是ax mod b=1,也就是ax-kb=1.考虑扩展的欧几里得定理.显然y可以是一个负值,我们的目的就是求一个最小的正整数x,让

NOIP2012同余方程

描述 求关于 x的同余方程  ax ≡ 1(mod b) 的最小正整数解. 输入格式 输入文件 mod.in输入只有一行,包含两个正整数a,b,用一个空格隔开. 输出格式 输出文件 为 modmod .out .输出只有一行,包含一个正整数,包含一个正整数 ,包含一个正整数 x0,即最小正整数解. 输入据保证一定有解. 测试样例1 输入 3 10 输出 7 备注 对于 40% 的数据    2 ≤b≤1,000对于 60% 的数据    2 ≤b≤50,000,000对于 100%的数据    

【codevs1200】 NOIP2012—同余方程

codevs.cn/problem/1200/ (题目链接) 题意:求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. Solution    这道题其实就是求a mod b的逆元x.所谓逆元其实很简单,记a的关于模p的逆 元为a^-1,则a^-1满足aa^-1≡ 1(mod p),用扩展欧几里德即可.  关于扩展欧几里德,有博客写了证明:blog.csdn.net/lincifer/article/details/49391175   代码: // codevs1200 #i

COGS——T 1265. [NOIP2012] 同余方程

http://cogs.pro/cogs/problem/problem.php?pid=1265 ★☆   输入文件:mod.in   输出文件:mod.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. [输入格式] 输入只有一行,包含两个正整数 a, b,用一个空格隔开. [输出格式] 输出只有一行,包含一个正整数X0,即最小正整数解.输入数据保证一定有解. [样例输入] 3 10 [样例输出

[NOIP2012] 同余方程

题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入 输入文件为 mod.in.输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出 输出文件为 mod.out.输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 样例输入 3 10 样例输出 7 提示 [数据范围] 对于 40%的数据,2 ≤b≤ 1,000: 对于 60%的数据,2 ≤b≤ 50,000,000: 对于 100%的数据,2 ≤a, b≤ 2,000,000,00

NOIP2012同余方程[exgcd]

题目描述 求关于 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.

数论/the second wave

扩展欧几里得算法. void exgcd(int a,int b,int&x,int&y){ if(!b) { x=1;y=0;return ; } exgcd(b,a%b,x,y); int temp=x;x=y;y=temp-a/b*y; } 1)ax+by=c. 有解的条件是c%gcd(a,b)==0,因为ax+by=gcd(a,b)一定有解. 设解是x0,y0,则通解 x=x0+(b/gcd(a,b))*t  y=y0-(a/gcd(a,b))*t 2)ax ≡1 (mod m)