数论扩展欧几里德基础习题(4.15)
来源:互联网 发布:淘宝我回答的怎么删除 编辑:程序博客网 时间:2024/05/29 17:06
https://www.luogu.org/problem/lists?name=%E5%90%8C%E4%BD%99%E6%96%B9%E7%A8%8B&orderitem=pid&tag=
题目:
题目描述
求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解。
输入
输入只有一行,包含两个正整数 a, b,用一个空格隔开。
输出
输出只有一行,包含一个正整数 x0,即最小正整数解。输入数据保证一定有解。
样例输入
3 10
样例输出
7
思路:对题目中的式子进行变形可以得到ax - by = 1.可用扩展欧几里德算出一组x,y
由于保证数据肯定有解,可知gcd(a,b) = 1
由书中可知 x` = x + kb`,y` = y + k a`.其中(a` = a/gcd(a,b),b` = b / gcd(a,b) )
long long temp = b / d;/*注:因为要求最小,依旧要满足方程,那么要保证当x改变,依旧是成立的。而b / d 作为x改变值,是能使得方程成立的最小值(如果肯能是负数要换成整数)*/
x = (x % temp + temp) % temp;的方法确保是最小的整数解
get
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <sstream>#include <string>#include <algorithm>#include <list>#include <map>#include <vector>#include <queue>#include <stack>#include <cmath>#include <cstdlib>using namespace std;void gcd(long long a,long long b,long long &d,long long &x,long long &y){ if(!b) { d = a,x = 1,y = 0; } else { gcd(b,a%b,d,y,x); y -= x *(a/b); }}int main(){ // freopen("in.txt","r",stdin); long long a,b; scanf("%lld%lld",&a,&b); long long d,x,y; gcd(a,b,d,x,y); long long temp = b / d; x = (x % temp + temp) % temp; printf("%lld\n",x); return 0;}
0 0
- 数论扩展欧几里德基础习题(4.15)
- 数论基础 辗转相除 扩展欧几里德
- [数论]青蛙约会 (扩展欧几里德)
- 数论/扩展欧几里德算法
- 扩展欧几里德---数论
- 基础数论复习——扩展欧几里德算法
- 【数论】[总结]扩展欧几里德算法
- 数论初步之扩展欧几里德
- 初等数论-扩展欧几里德算法
- 【数论(扩展的欧几里德)】ZOJ-3593-One Person Game
- poj 1061(数论之欧几里德及其扩展)
- uva 10104 Euclid Problem (数论-扩展欧几里德)
- hihocoder 1297 数论四·扩展欧几里德(exgcd)
- HDU-2669(数论初步之扩展欧几里德)
- 扩展欧几里德算法(数论初步) By ACReaper
- 数论,扩展欧几里德算法,同余方程
- 扩展欧几里德算法与数论倒数
- hihocoder 数论四·扩展欧几里德
- Git如何回滚版本
- 【慕课笔记】5-2 四种XML解析方式大PK—四种解析方式解析速度分析
- Spring 声明式事务使用
- 字符串遇到指定的字符停止输入
- html学习之路——第二天(1)
- 数论扩展欧几里德基础习题(4.15)
- 挖掘百度前十竞争对手的致命弱点
- 来谈谈C++ 位运算 & | << >> ^ ~ %
- 绘图
- js监听浏览器关闭
- 带有空格的字符串逆置(如:i am a student 逆置为 student a am i)
- 网页授权提示该链接无法访问
- J2SE(四)Java之类的详解
- Python3.4中filter函数,map函数和reduce函数