uva10673floor and cei扩展的欧几里得
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85482#problem/D
题意: 输入x和k,输出p和q。
思路:扩展的欧几里得。系数只差1,故最大公约数一定是1,最后得出ax+by=1的形式,而题目中等式右面不为1,那么等式右边是几就将等式左右同乘几,即将得出的x,y同乘几,得出最后的结果。
知识:
typedef long long ll;
void f(ll a,ll b,&ll g,&ll x,&ll y)
{
if(!b){g=a;x=1;y=0;}
else {f(b,a%b,g,y,x);y-=a/b*x;}
}
将除数传给被除数,余数传给除数,这是辗转相除法;最后的边界语句中g=a,因为当a是除数,对应的余数b是0时,a就是最大公约数,在递推后得到后将其原样递归出来,即g传给g;而x=1,y=0,y-=a/b*x,x和y交换值,则是通过推导(gcd(a,b)=gcd(b,a%b),将x,y,a,b的关系表达出来,变换一下即可得到算法)得出的式子。
#include<iostream> using namespace std; typedef long long ll; void f(ll a,ll b,ll& d,ll& x,ll& y) {if(!b){d=a;x=1;y=0;}else{f(b,a%b,d,y,x);y-=a/b*x;} } int main() {int t;cin>>t;for(int i=0;i<t;i++){ ll x,k,p,q,g;cin>>x>>k;if(x%k==0)cout<<0<<" "<<k<<endl;else{f(x/k,x/k+1,g,p,q);cout<<p*x<<" "<<q*x<<endl;}} }
转载于:https://www.cnblogs.com/mu-ye/p/5445849.html
uva10673floor and cei扩展的欧几里得相关推荐
- 数论--欧几里得和扩展的欧几里得定理
欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd( ...
- EEA扩展欧几里得 python实现及大坑
python之(扩展)欧几里得_小乌龟的博客-CSDN博客_exgcd python 这是人家的递归方法 elegant~ 我按照正常的从头到尾的顺序,写的 但是 犯了坑: python里面的取模运算 ...
- 扩展欧几里得 POJ 1061
感觉这道题目的数据好水啊...我的代码我都觉得姿势特别奇怪...竟然还过了... 好吧,原来不是姿势奇怪,而是逆元需要用的时候是余数也需要的时候,这里的余数是不需要的,所以就AC了 就说一下碰到的问题 ...
- 最大整数扩展欧几里得
时间紧张,先记一笔,后续优化与完善. 辗转相除法求最大公约数,相信大家都在高中学过了,它也叫做欧几里得算法. 那么扩展欧几里得算法呢?它也能求出两个数的最大公约数,不过这不是他的目的,他用来解一个线性 ...
- Java实现算法导论中求解模线性方程解(基于最大公约数欧几里得扩展算法)
基于最大公约数欧几里得扩展算法求解算法导论中模线性方程解.具体要结合算法导论中的有关数论算法章节理解,具体代码如下: package cn.ansj;/*假设方程ax=b(mod n)有解,且x0是方 ...
- 求逆元(线性求逆元)及其扩展欧几里得
线性求逆元模板: int inv[maxn]; void initInverse(){inv[1] = 1;for(int i = 2; i <= maxn; i++)inv[i] = (p - ...
- 欧几里得及扩展欧几里得算法
欧几里得算法 这个就是常说的辗转相除法,用于计算两个整数 $a,b$ 的最大公约数,即$$gcd(a,b)=gcd(b,a\;mod\;b)$$ int gcd(int a,int b){return ...
- poj-青蛙的约会(扩展欧几里得)nyoj-小柯的约会
由题意可列出方程 x + m * s - (y + n * s) = k * l; 化简得 (n-m)*s + k*l = x - y 化简得 (n-m)*s = x - y (mod l); ...
- [模板]欧几里得算法/扩展欧几里得
最大公因数(欧几里得算法) $gcd(a,b)=gcd(b\%a,a)$(不一定需要a<b) $gcd(0,b)=b$ 1 inline int gcd(int a,int b){ 2 retu ...
- “景驰科技杯”2018年华南理工大学程序设计竞赛 H-对称与反对称(扩展欧几里得求逆元)
题目链接 题目描述: 给出一个N*N的方阵A.构造方阵B,C: 使得A = B + C.其中 B为对称矩阵,C为反对称矩阵. 对于方阵S中的任意元素,若(S)ij = (S)ji,则称S为对称矩阵 对 ...
最新文章
- Stack Overflow上188万浏览量的提问:Java 到底是值传递还是引用传递?
- python映射类型-什么是python中唯一的映射类型
- PHP判断变量内容是什么编码
- Python中最常用十大图像处理库详细介绍
- python基础教程:while循环与运算符和编码
- 快速开发系统之前台页面 ---- NO1----登录页面
- 一个地方越有钱,人们就越不想结婚?
- 【Python爬虫】股票数据定向爬虫
- 数学习题:求解不定方程a^2 + b^2 = 3025
- 【Flink】Flink 反压机制 导致checkpoint 失败
- 查看文件md5_软件推荐丨go-fastdfs——高性能、高可靠分布式文件系统
- [bzoj1497][NOI2006]最大获利_网络流_最小割
- 西北工业大学计算机专业课考什么,西北工业大学西工大计算机考研经验
- 《2013小企业会计准则》的适用范围
- 移动硬盘如何合并磁盘
- 双稳态电路的两个稳定状态是什么_NE555集成电路--交替闪烁灯
- feifei_about
- Mac OS X下的动态链接库
- 分体式蓝牙耳机有哪些推荐?好用的分体式蓝牙耳机推荐
- 5G智慧合杆的城市商业区应用