gcd(x,y)=1,l<=x,y<=r,求x,y使得|x-y|最大

2025-01-12T12:20:00


相关题目: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)

    }

}

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »