摘要:
首先证明欧几里德算法(即最大公约数算法)设有a,b两个数;a=k*b+r,r=a%b;假设d是a,b的一个公约数,a%d=0,b%d=0;r=a-k*b,因此r%d=0;即所有a,b的公约数都是b,a%b的公约数,那么gcd(a,b)=gcd(b,a%b);所以当a%b=0时,即a和b的最大公约数就是他们本身;算法代码int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}gcd(a,b)=gcd(b,r0)=gcd(r0,r1)=...=gcd(rn-1,rn)=gcd(rn-1,0)=rn-1. 接下来讲解欧几里得扩展算法(即求n*a+m*b=gcd 阅读全文
摘要:
第一题:图标排列百度应用平台上有很多有趣的应用,每个应用都由一个开发者开发,每个开发者可能开发一个或多个应用。百度的工程师们想把应用尽可能好的推荐给用户。研究发现,同一个开发者开发的程序的图标有很大的相似性。如果把同一个开发者开发的应用放在一起,用户很快就会厌倦相似的图标,如果把这些图标穿插摆放效果就会好很多。现在工程师想给用户推荐来自m个开发者的n个应用,在推荐的时候这些应用的图标将排成整齐的一行展示给用户,相邻两个图标之间的距离正好是1,工程师们想让这些图标尽可能的穿插摆放。为了衡量穿插摆放的效果,给每个图标定义一个“分离度”,分离度的值是指当前图标和它左边最近的来自同一个开发者的图标之间 阅读全文