luogu1082 同余方程
题目大意:求$$ax\equiv 1(\ \mathrm{mod}\ m)$$的最小正整数解。
因为$ax-1|m$,故令$ax-1=-ym$,原方程就变成了$ax+my=1$。根据bezout定理此方程有解当且仅当$\gcd(a, m)=1$成立,然后解方程$ax+my=\gcd(a,m)$即可。
先不考虑原题,若要解方程$$ax+by=\gcd(a,b)$$,要用到扩展欧几里得算法。当$b=0$时,显然$x=1,y=0$。因为$$\gcd(a,b)=\gcd(b,a\ \mathrm{mod}\ b), a\ \mathrm{mod}\ b=a-\lfloor \frac{a}{b}\rfloor b$$,所以如果知道了$$bx'+(a-\lfloor \frac{a}{b}\rfloor b)y'=\gcd(b, a\ \mathrm{mod}\ b)=\gcd(a, b)$$,将等式左面倒一倒就变成了$$ay'+b(x'-\lfloor \frac{a}{b}\rfloor y')=\gcd(a,b)$$。所以令当前的$x=y', y=x'-(a/b)*y'$便是一个解。于是在欧几里得算法的基础上加上这一句即可。
回到原题,人家要求最小正整数解,因为该同余方程$ax\equiv 1(mod m)$的通解为所有模m与x0同余的整数($ax+amk=a(x+mk)\equiv 1(\ \mathrm{mod}\ m)$依然成立),我们要将解转移使$x\in [1,m)$。故将以上解出的$x$进行(x%m+m)%m。x%=m时,$x\in (-m,m)$。再加m模m是为了处理x是负数的情况。
#include <cstdio>
#include <cstring>
using namespace std; long long Exgcd(long long a, long long b, long long &x, long long &y)
{
if (b == 0)
{
x = 1;
y = 0;
return a;
}
long long d = Exgcd(b, a%b, x, y);
long long tx = x;
x = y;
y = tx - (a / b)*y;
return d;
} long long Inv(long long a, long long m)
{
long long x, y;
Exgcd(a, m, x, y);
return (x%m + m) % m;
} int main()
{
long long a, m;
scanf("%lld%lld", &a, &m);
printf("%lld\n", Inv(a, m));
return 0;
}
luogu1082 同余方程的更多相关文章
- luogu1082 [NOIp2012]同余方程 (扩展欧几里得)
由于保证有解,所以1%gcd(x,y)=0,所以gcd(x,y)=1,直接做就行了 #include<bits/stdc++.h> #define pa pair<int,int&g ...
- NOIP2012同余方程[exgcd]
题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开 输出格式: 输出只有一行,包含一个正整 ...
- NOIP2012同余方程
描述 求关于 x的同余方程 ax ≡ 1(mod b) 的最小正整数解. 输入格式 输入文件 mod.in输入只有一行,包含两个正整数a,b,用一个空格隔开. 输出格式 输出文件 为 modmod ...
- [NOIP2012] 提高组 洛谷P1082 同余方程
题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正 ...
- POJ 1061 同余方程
两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是 它们出发之前忘记了一件很重要的事情,既没有问清楚对方的 ...
- NOIP2012 同余方程-拓展欧几里得
题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正 ...
- 数论 - n元线性同余方程的解法
note:n元线性同余方程因其编程的特殊性,一般在acm中用的很少,这里只是出于兴趣学了一下 n元线性同余方程的概念: 形如:(a1*x1+a2*x2+....+an*xn)%m=b%m ...
- 【codevs1200】 NOIP2012—同余方程
codevs.cn/problem/1200/ (题目链接) 题意 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. Solution 这道题其实就是求${a~mod~b}$的逆元 ...
- poj 1061 扩展欧几里得解同余方程(求最小非负整数解)
题目可以转化成求关于t的同余方程的最小非负数解: x+m*t≡y+n*t (mod L) 该方程又可以转化成: k*L+(n-m)*t=x-y 利用扩展欧几里得可以解决这个问题: eg:对于方程ax+ ...
随机推荐
- B - Is your horseshoe on the other hoof?
Problem description Valera the Horse is going to the party with friends. He has been following the f ...
- 基于artDialog的扩展
/* * * 引用此文件必须引用以下两个资源文件,并且还要引用jQuery * <link href="ui-dialog.css" rel="stylesheet ...
- node函数buf.readDoubleBE详解
offset {Number} 0 noAssert {Boolean} 默认:false 返回:{Number} 从该 Buffer 指定的带有特定尾数格式(readDoubleBE() 返回一个较 ...
- python练习--1、简易登录接口
function:用于实现简单的用户登录接口. description:用户信息存储于字典中,增加用户需手动写入代码中.最多可以尝试登录9次,首次使用会先在程序目录下创建锁文件.若在用户栏输入quit ...
- Android使用charles抓包
1.下载并安状软件,官网在此: 2.前题条件,电脑和手机必须在同一网段 3.在Charles界面选择菜单 proxy->proxy settings 勾选"Enable transpa ...
- 努比亚 Z17(Nubia NX563J) 解锁BootLoader 并刷入recovery
工具下载链接:https://pan.baidu.com/s/1mjEzcyG 备用下载链接:https://pan.baidu.com/s/1eTdx6Zg 密码:1d3r 本篇教程教你如何傻瓜式解 ...
- Excel 批量出来数据
try { string sheetname = TextBox1.Text.Trim(); HttpPostedFile upLoadPostFile = FileUpload1.PostedFil ...
- 简繁体互换工具:opencc
简繁体互换工具:opencc opencc是一个简体.繁体相互转换的命令行工具. 安装 下载软件包.在下载页面下载软件包(如1.0.4版本) 解压.通过命令解压:tar -xzvf opencc-1. ...
- 复习java基础第一天
一:static static: 静态的. 1. 若需要一个类的多个对象共享一个变量,则该变量需要使用 static 修饰. 2. 因为 static 修饰的变量为类的所有的实例所共享,所以 ...
- EKF优化:协方差coff计算公式、意义、Code优化
复习!复习! 原文链接:http://blog.csdn.net/goodshot/article/details/8611178 1.代码: Matlab相关系数的意义: Eigen::Matrix ...