The Balance POJ 2142 扩展欧几里得】的更多相关文章

Description Ms. Iyo Kiffa-Australis has a balance and only two kinds of weights to measure a dose of medicine. For example, to measure 200mg of aspirin using 300mg weights and 700mg weights, she can put one 700mg weight on the side of the medicine an…
原题实际上就是求方程a*x+b*y=d的一个特解,要求这个特解满足|x|+|y|最小 套模式+一点YY就行了 总结一下这类问题的解法: 对于方程ax+by=c 设tm=gcd(a,b) 先用扩展欧几里得求出方程ax+by=tm的解x0.y0 然后有a*x0+b*y0=tm 令x1=x0*(c/tm),y1=y0*(c/tm) 则a*x1+b*y1=c x1.y1即原方程的一个特解 这个方程的通解:xi=x1+k*(b/m),yi=y1-k*(a/m) 另:如果要求yi的最小非负解?令r=a/tm…
Reference: http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html 之前说过中国剩余定理传统解法的条件是m[i]两两互质,所以这题就不能用传统解法了= = 其实还有种方法: 先来看只有两个式子的方程组: c≡b1 (mod a1) c≡b2 (mod a2) 变形得c=a1*x+b1,c=a2*x+b2 a1*x-a2*y=b2-b1 可以用扩展欧几里得求出x和y,进而求出c 那么多个式子呢?可以两个两个的迭代求.…
题目可以转化成求关于t的同余方程的最小非负数解: x+m*t≡y+n*t (mod L) 该方程又可以转化成: k*L+(n-m)*t=x-y 利用扩展欧几里得可以解决这个问题: eg:对于方程ax+by=c 设tm=gcd(a,b) 若c%tm!=0,则该方程无整数解. 否则,列出方程: a*x0+b*y0=tm 易用extend_gcd求出x0和y0 然后最终的解就是x=x0*(c/tm),y=y0*(c/tm) 注意:若是要求最小非负整数解? 例如求y的最小非负整数解, 令r=a/tm,则…
两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的.但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的.为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面. 我们把这两只青蛙分别叫做青蛙A和…
题目链接:http://poj.org/problem?id=2115 题意: 给出一段循环程序,循环体变量初始值为 a,结束不等于 b ,步长为 c,看要循环多少次,其中运算限制在 k位:死循环输出FOREVER 那么这里就是: (b-a)%gcd(c,n)==0,有解:否则无解. 有解的时候,有多少解呢? 求出来的解是: 这里就是: x * (b-a) / gcd(c,n) 其中最小的解又是多少呢? 定理: 令 t = n / d; 最小的解是:(x%t+t)%t; #include <cs…
#include <cstdio> #include <algorithm> #include <cstring> #include <iostream> using namespace std; int a,b,c; int exgcd(int a,int b,int &x,int &y){ ){ x = ; y = ; return a; } int d = exgcd(b,a%b,x,y); int temp = x; x = y; y…
#include<stdio.h> #include<string.h> typedef long long ll; void gcd(ll a,ll b,ll& d,ll& x,ll& y){ ){ d=a; x=; y=; return ; } gcd(b,a%b,d,y,x); y-=(a/b)*x; } int main(){ ll x,y,m,n,l; while(~scanf("%lld%lld%lld%lld%lld",&a…
题目链接:https://cn.vjudge.net/contest/276376#problem/E 题目大意:给你n,m,k,n,m代表当前由于无限个质量为n,m的砝码.然后当前有一个秤,你可以通过秤的左边和右边的砝码种类和数目,能够测出m的质量,然后问你使用两个砝码总和最少的情况. 具体思路:和前面几个题的思路一样,列出等式Ax+By=C,然后再通过扩展欧几里得去解这个式子,当前一共有两组解,一个是通过x,解出y.另一个是通过y,解出x.我们就取这两种的总和最小的情况就可以了.注意x和y都…
d.用2种砝码,质量分别为a和b,称出质量为d的物品.求所用的砝码总数量最小(x+y最小),并且总质量最小(ax+by最小). s.扩展欧几里得求解不定方程. 设ax+by=d. 题意说不定方程一定有解.对于不定整数方程pa+qb=c,若 c mod Gcd(p, q)=0,则该方程存在整数解,否则不存在整数解. 也就是说,d mod gcd(a,b)=0. a,b,d同时除以gcd(a,b)得到a'x+b'y=d'; 用扩展欧几里德求出 a'x+b'y=gcd(a',b')=1的解(x,y),…