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+ ...
随机推荐
- 管理mysql数据严格模式,和安全模式处理
最近使用mysql数据库高一点的版本遇到了,插入和修改等语句失败情况.语句没有错误,但是workbench提示 Field 'id' doesn't have a default value.原因是 ...
- .net MVC成长记录(四)Linq(1)
今天不忙,没什么事情,继续写写随笔. 之前的文章写到了EF,很多人留言EF的操作用什么? 今天,就继续给大家分享EF的操作, Linq . 先从Linq操作Object内置对象开始 从Linq的基础 ...
- Safe Area Layout Guide before iOS 9.0
今天使用Xcode9.1重建项目,什么都没写运行报错:Safe Area Layout Guide before iOS 9.0!目前为止,不晓得原因,现记录解决方法:
- 教材配套PPT初稿
1-10章初稿,基本完整.有些粗糙,后面可能会稍作调整. 附更新情况如下: 1.增加了第10章内容: 2.第5章增加了一些内容: 3.第3章内容部分更新: 4.增加了第8-9章内容. 订正:更新了第8 ...
- Why use Cache-Control header in request?
本地缓存也是缓存代理的一部分. 请求时使用Cache-Control 表示缓存的使用策略. 请求头里的no-cache表示浏览器不想读缓存,并不是说没有缓存.一般在浏览器按ctrl+F5强制刷新时,请 ...
- html formData 数据 提交和 .netMVC接收
<form id="uploadForm" enctype="multipart/form-data"> <input type=" ...
- 基于MATLAB的语音信号处理
一.图形界面设计 1.新建GUI界面 2.新建空白页 3.命名为"yydsp",打开界面 4.拖放控件 5.按预定功能修改界面 6.填写Callback函数 未填写前的代码: fu ...
- 【ubuntu子系统】使用windows自带的ubuntu子系统
在windows10系统中,自带了一款ubuntu子系统,就像是一个应用程序,一款软件,提供ubutnu的terminal窗口,可以使用对应的命令行模式.最重要的是,可以直接用来连接linux服务 ...
- 15.6.1 【Task使用】基于任务的异步模式
C# 5异步函数特性的一大好处是,它为异步提供了一致的方案.但如果在命名异步方法以及 触发异常等方面做法存在着差异,则很容易破坏这种一致性.微软因此发布了基于任务的异步模 式(Task-based A ...
- php第八节课
加载 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...