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),…
主要参考下面两篇论文 1.<不定方程x(x-1)=Dy(y-1)的解法> 2.<用递推公式求一个不定方程的正整数解> 原有题目意思是 记得有一次全班去唱K, 其中有个活动是情歌对唱. 具体操作流程是这样的: 准备好 21 个阄(我们班 15 男 6 女), 其中只有两个是有标记的, 每人随意抓取一个, 最后取到有标记的阄的两个人去点首情歌对唱. 旁边一哥们儿幽幽地对我说, 看来搅基真是神的安排啊, 你看我们班的男女人数, 搅基的几率 C(15,2)/C(21,2) 刚好是 1/2.…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1407 题意: 有n个野人,野人各自住在第c[i]个山洞中(山洞成环状),每年向前走p[i]个山洞,到这个山洞住下来. 每个野人的寿命为l[i],问至少需要多少个山洞,才能让野人在有生之年永远不住在同一个山洞. 题解: 原本不会拓展欧几里得和同余方程,在这里尽量详细地写一下由这题学到的东西. 我原本是从网上看各类题解然后打的,因为不理解和某些题解上的错误,导致调了很久. 下面写我的题解,如…
贝祖定理:即如果a.b是整数,那么一定存在整数x.y使得ax+by=gcd(a,b).换句话说,如果ax+by=m有解,那么m一定是gcd(a,b)的若干倍.(可以来判断一个这样的式子有没有解)有一个直接的应用就是 如果ax+by=1有解,那么gcd(a,b)=1: int gcd(int a,int b){return b==0?a:gcd(b,a%b);} 然而这并不能告诉我们x,y解是多少. 扩欧 首先我们观察上面的式子发现一定有一个解a*1+b*0=gcd(a,b).(b%a=0) 但是…
Romantic Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2385    Accepted Submission(s): 944 Problem Description The Sky is Sprite.The Birds is Fly in the Sky.The Wind is Wonderful.Blew Throw th…
一.不定方程 要求逆元,首先要知道什么是不定方程. 已知a,b,c,求解x,y,形如ax + by = c 的方程就是不定方程. 不定方程有两种解的情况: 1.无解 2.存在且有无限的解 那么,如何判断解的情况呢? 这时候,只需要拿出gcd就可以了, 若gcd(a,b) | c,则方程存在解,为什么呢 因为我们要使用扩展欧几里得来求不定方程,我们都知道欧几里得是求 ax + by = gcd(a,b) 中的 x,y的,因此如果我们要把c代换成gcd(a,b)的话,c一定是gcd(a,b)的整数倍…
题目id: 1 just print a+b give you two var a and b, print the value of a+b, just do it!! print a+b 题目id:  2 list排序 给你一个list L, 如 L=[2,8,3,50], 对L进行升序排序并输出 print sorted(L) 题目id: 3  字符串逆序 给你一个字符串 a, 如a=‘12345’,对a进行逆序输出a. print a[::-1] 题目id:4   输出字典key 给你一…
目录: 1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 4.歌星大奖赛 5.求最大数 6.高次方数的尾数 8.借书方案知多少 9.杨辉三角形 10.数制转换 11.打鱼还是晒网 12.抓交通肇事犯 13.该存多少钱 14.怎样存钱利最大 15.捕鱼和分鱼 16.出售金鱼 1.7 分数四则运算 17.平分七筐鱼 18.有限5位数 19. 8 除不尽的数 21.4位反序数 22.求车速 23.阿姆斯特朗数 24.完全数 26.亲密数 27.自守数 28.回文数 29.求具有abcd=(ab+c…
C语言趣味程序设计编程百例精解 C/C++语言经典.实用.趣味程序设计编程百例精解(1)  https://wenku.baidu.com/view/b9f683c08bd63186bcebbc3c.html https://blog.csdn.net/nigulasi_dawei/article/details/72795786 1.绘制余弦曲线 在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线 *问题分析与算法设计 如果在程序中使用数组,这个问题十分简单.但若规定不能使用数组,问题…
欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). 第一种证明: a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r 因此d是(b,a mod b)的公约数 假设d 是(b,a mod b)的公约数,则 d | b , d |r ,但是a…
原博网址:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). 第一种证明: a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a -…
题 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的.但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的.为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面. 我们…
先感谢参考文献:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 注:以下讨论的数均为整数 一.欧几里得算法(重点是证明,对后续知识有用) 欧几里得算法,也叫辗转相除,简称 gcd,用于计算两个整数的最大公约数 定义 gcd(a,b) 为整数 a 与 b 的最大公约数 引理:gcd(a,b)=gcd(b,a%b) 证明: 设 r=a%b , c=gcd(a,b) 则 a=xc , b=yc , 其中x , y互质…
点我看题目 题意 : 中文题不详述. 思路 : 设经过s步后两青蛙相遇,则必满足(x+m*s)-(y+n*s) = K*L(k = 0,1,2....) 变形得:(n-m)*s+K*L = x-y ; 另a = n-m,b = L,c = x-y,则上式变为a*s+b*k = c.于是就变成了扩展欧几里德,求解不定方程,线性同余方程.只要上式存在整数解,则这两个青蛙能相遇,否则不能. #include <stdio.h> #include <string.h> #include &…
这个困扰了自己好久,终于找到了解释,还有自己改动了一点点,耐心看完一定能加深理解   扩展欧几里德算法-求解不定方程,线性同余方程. 设过s步后两青蛙相遇,则必满足以下等式: (x+m*s)-(y+n*s)=k*l(k=0,1,2....) 稍微变一下形得: (n-m)*s+k*l=x-y 令n-m=a,k=b,x-y=c,即 a*s+b*l=c 只要上式存在整数解,则两青蛙能相遇,否则不能. 首先想到的一个方法是用两次for循环来枚举s,l的值,看是否存在s,l的整数解,若存在则输入最小的s,…
青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 90083   Accepted: 16257 Description 两仅仅青蛙在网上相识了,它们聊得非常开心,于是认为非常有必要见一面.它们非常高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.但是它们出发之前忘记了一件非常重要的事情,既没有问清楚对方的特征,也没有约定见面的详细位置.只是青蛙们都是非常乐观的,它们认为仅仅要一直朝着某个方…
最近想学数论 刚好今天(初赛上午)智推了一个数论题 我屁颠屁颠地去学了乘法逆元 然后水掉了P3811 和 P2613 (zcy吊打集训队!)(逃 然后才开始做这题. 乘法逆元 乘法逆元的思路大致就是a*x恒等于1(mod b)满足a,b互质,则x为a的逆元 这里给一个P2613的函数 void exgcd(int a, int b, int &d, int &x,int &y) { ) { d = a; x = ; y = ; return; } exgcd(b, a%b, d,…
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703.课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看. 阅读程序 程序分析题,阅读下列程序,写出程序的运行结果.建议在上机时进行验证(云学堂将给出代码.直接拷贝到C4droid或CodeBlocks中运行就可以).假设与自己的预期有出入.尤其注意对比找出问题. 读这些小程序,能够见识不少处理技巧.读程序,也是一种很很重要的学习方式,应该给予重视!…
欧几里德定理: 对于整数a,b来说,gcd(a, b)==gcd(b, a%b)==d(a与b的最大公约数),又称为辗转相除法 证明: 因为a是d的倍数,b是d的倍数:所以a%d==0:b%d==0: 设k=a/b:r=a%b:则 a=k*b+r: 由上得出:r=a-k*b: 因为a和b都是d的倍数,所以(a-k*b)也是d的倍数,所以r也是d的倍数: 所以gcd(a, b)==gcd(b, a%b)==d 而为什么要证明gcd(a, b)==gcd(b, a%b)==d这个式子成立呢? 其实证…
青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions:122411   Accepted: 25980 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能…
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=106   题意:求ax + by + c = 0在[x1, x2], [y1, y2]区间内有多少组解? 解析: ①令c = -c有ax + by = c,可用扩展欧几里德解方程解出特解 当然要先考虑a = 0, b = 0, c = 0的情况进行特判 例如:a = 0, b = 1, c = 3,x∈[x1, x2], y∈[3, 4] 即可得知有方程有x2-x1+1个解,因为x可以区间…
ACM数论——欧几里得与拓展欧几里得 欧几里得算法: 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). int gcd(int a,int b) { return b ? gcd(b,a%b) : a; } 扩展欧几里德算法: 基本算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使…
扩展欧几里得是用于求解不定方程.线性同余方程和乘法逆元的常用算法. 下面是代码: function Euclid(a,b:int64;var x,y:int64):int64; var t:int64; begin then begin x:=;y:=;exit(a); end else begin Euclid:=Euclid(b,a mod b,x,y); t:=x;x:=y;y:=t-(a div b)*y; end; end; 下面出现了其中后两个应用.(虽然个人认为不定方程和同余方程可…
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). 递归版算法: int gcd(int a,int b) { ) return a; return gcd(b,a%b); } 递归优化版: int gcd(int a,int b) { return b ? gcd(b,a%b) : a; } 迭代版: int Gcd(int a, int b)…
学习链接:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 先来学习一下什么是欧几里得算法: 欧几里得原理是:两个整数a ,b的公约数等于b ,a%b这两个数的公约数.即gcd(a,b)=gcd(b,a%b),他们的任何公约数都是相同的,所以他们的最大公约数也是相同的. 那么结合任何数和0的最大公约数都是他自己,就可以得出最大公约数的求解算法了. int gcd(int a, int b) { ) return a…
exgcd解不定方程时候$abs()$不能乱加 Description Input 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, Li表示每个野人所住的初始洞穴编号,每年走过的洞穴数及寿命值. (1<=Ci,Pi<=100, 0<=Li<=10^6 ) Output 仅包含一个数M,即最少可能的山洞数.输入数据保证有解,且M不大于10^6. Sample Input 3 1 3 4 2 7 3 3 2 1 Samp…
传送门 这道题是求解不定方程的一道好练习题. 题目描述的很诡异……还说什么k进制,其实就是要求一个数A,每次加C,问到B要加多少次,所有的数对2k取模. 也就是说我们能列出如下方程:A+xC ≡ B (mod 2k)我们把这个方程两边移项转化,那么就能得到一个不定方程的形式. 老套路,判断有没有解,否则用exgcd求解. 本题有小坑,你在1<<32的时候,即使变量开了longlong也不行,必须写成1ll的形式,否则会WA. 看一下代码. #include<cstdio> #inc…
传送门:http://codeforces.com/contest/938/problem/C 给定两个正整数n,m(m≤n),对于一个n阶0-1方阵,其任意m阶子方阵中至少有一个元素“0”,则可以求解这个方阵中的“1”的最大数目.现求解这个问题的逆向问题:已知这个最大数目为X,求相应的n和m. 由原问题可以得到方程:$n^2-\left\lfloor\frac{n}{m}\right\rfloor^2=X\cdots(1)$,于是,对于给定的X,求解不定方程(1). 令$k=\left\lfl…
欧几里得& 拓展欧几里得(Euclid & Extend-Euclid) 欧几里得算法(Euclid) 背景: 欧几里德算法又称辗转相除法.用于计算两个正整数a.b的最大公约数. --百度百科 代码: 递推的代码是相当的简洁: int gcd(int a,int b) { return b == 0 ? a : gcd(b, a % b); } 分析: 方法说了是辗转相除法,自然没有什么好介绍的了. . Fresh肯定会认为这样递归下去会不会爆栈?实际上在这里是不会爆栈的,由于递归的层数是…
一.          什么是数组 数组就是具有相同数据类型的有序集合. 分为一维数组.二维数组及多维数组. 一维数组就是用一个下标定义的数组 二维数组就是用二个下标定义的数组 我们把具有三个下标及三个下标以上的数组称为多维数组. 二.          数组 1.       一维数组的定义 (1) 一维数组的定义的形式始下: 类型说明符  数组名[常量表达式]: Int         a     [10]; 定义数组时,数组的大小必须确定 (2) 对于一维数组的定义说明如下: 数组名应符合…