gcd(x,y)=1,l<=x,y<=r,求x,y使得|x-y|最大
相关题目:Problem - D - Codeforces
解法:从大到小枚举x,y距离len(即|x-y|),然后判断gcd(x,x+len)是否==1,若==1则求出解直接return。这种方法比直接双重for循环遍历x,y快,虽然两者时间复杂度都是O(n^2),但由于该方法是直接从len大到len小遍历的,相当于提前确定len值,找到结果能提前结束,并且找到两个距离为len的互质数又比较好找,所以跑得比较快;而双重for直接遍历不确定len值,需要完全遍历才能找到最大len值,相当于硬生生跑完了O(n^2)的复杂度,所以较慢。
写法:
for(int len=r-l;len>=0;len--) {
for(int i=l;i<=r-len;i++) {
if(gcd(x,x+len)==1)
}
}