洛谷Oj-P1082 同余方程-扩展欧几里得
2018-03-25 16:59
323 查看
题目描述:
求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解。
AC代码:
解决方法:
ax≡1(modb),b≥2
ax=by+1
ax−by=1有解
由裴蜀定理得,gcd(a,b) = 1
ax−by=gcd(a,b)可以用扩展欧几里得算法来求解
扩展欧几里得算法:
ax+by=gcd(a,b)
a=⌊ab⌋b+a%b①
gcd(a,b)=gcd(b,a%b)②
代入①、②
{⌊ab⌋b+a%b}x+by=gcd(b,a%b)
⌊ab⌋bx+(a%b)x+by=gcd(b,a%b)
b{⌊ab⌋x+y}+(a%b)x=gcd(b,a%b)
令
x′=⌊ab⌋x+y
y′=x
a′=b
b′=a%b
数论这一部分还是不太懂……
求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解。
AC代码:
void ex_gcd(int a,int b,int &x,int &y) { if(b == 0) { x = 1; y = 0; } else { ex_gcd(b,a % b,y,x); y -= (a / b) * x; } return; } int main() { int a,b,x,y; cin >> a >> b; ex_gcd(a,b,x,y); cout << (x + b) % b << endl;//防止x为负数,但是为什么对b取模呢 return 0; }
解决方法:
ax≡1(modb),b≥2
ax=by+1
ax−by=1有解
由裴蜀定理得,gcd(a,b) = 1
ax−by=gcd(a,b)可以用扩展欧几里得算法来求解
扩展欧几里得算法:
ax+by=gcd(a,b)
a=⌊ab⌋b+a%b①
gcd(a,b)=gcd(b,a%b)②
代入①、②
{⌊ab⌋b+a%b}x+by=gcd(b,a%b)
⌊ab⌋bx+(a%b)x+by=gcd(b,a%b)
b{⌊ab⌋x+y}+(a%b)x=gcd(b,a%b)
令
x′=⌊ab⌋x+y
y′=x
a′=b
b′=a%b
数论这一部分还是不太懂……
相关文章推荐
- 洛谷oj - P1082 同余方程(扩展欧几里德)
- 【NOIP 2012 Day2 T1】同余方程(扩展欧几里得)
- 【扩展欧几里得】NOIP2012同余方程
- POJ 2115 扩展欧几里得解最基本的同余方程
- 同余方程组的扩展欧几里得解法
- 【扩展欧几里得】codevs1200-同余方程
- POJ 2891 & 2018多校练习赛(第三场)-B(扩展欧几里得解同余方程组)
- POJ - 1601 - 青蛙的约会 - (扩展欧几里得解同余方程)
- [搬运]关于扩展欧几里得与同余方程
- 同余方程(扩展欧几里得)
- 扩展欧几里得详解 NOIP2012同余方程 青蛙的约会
- 扩展欧几里得模板(洛谷1082 同余方程NOIP 2012 提高组 第二天 第一题)
- 【扩展欧几里得】Codevs 1200: [noip2012]同余方程
- 【NOIP2012】洛谷1082 同余方程 扩展欧几里得详解
- 同余方程——扩展欧几里得の板子
- exgcd扩展欧几里得--noip同余方程
- 【扩展欧几里得】Codevs 1200: [noip2012]同余方程
- Noip2012 Day2 T1 同余方程(扩展欧几里得)
- noip2012 同余方程 (扩展欧几里得)
- [NOIP 2012]同余方程 扩展欧几里得