LeetCode 题解:1250. 检查「好数组」,裴蜀定理,详细注释
原题链接:https://leetcode.cn/problems/check-if-it-is-a-good-array/
关于裴蜀定理:
裴蜀定理的含义为:如果有不全为 0 的整数
a和b,它们的最大公约数为g,那么对任意整数x和y,都满足x * a + y * b = n * g,n为整数。裴蜀定理的推论:如果有整数
a1, a2, ...an,其中有任意两个数是互质(最大公约数为 1)的,那么就存在整数x1, x2, ...xn,使得x1 * a1 + x2 * a2 + ...xn * an=1(参考n个整数间的裴蜀定理)
如果有两个数
a和0,那么它们的最大公约数是a如果有两个数
42和18,它们的最大公约数是g由于
42 % 18 = 24,42可以拆分为18和24。由于42可以被g整除,18也可以被g整除,那么24也一定可以被g整除。那么,问题就被转换为了求24和18的最大公约数24和18可以转换成18和618和6可以转换成12和612和6可以转换成6和66和6可以转换成6和0最后可求得
42和18的最大公约数为6
将欧几里得算法转换成代码:
方法一:递归
方法二:迭代
解题思路:
基于以上分析,那么该题就转换成了:在
nums中,是否有两个数是互质的假设
nums[1]和nums[4]互质,那么从nums[0]一直到nums[4]的所有数字,最大公约数是1因此我们只要计算除
nums[0]到nums[3]的最大公约数,与nums[4]的最大公约数为1即可一旦
nums中有两个数的最大公约数为1,那么nums中所有数字的最大公约数就是1,nums一定是个“好数组”
版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/2f8998e4070d483bc0c6ee88f】。文章转载请联系作者。







评论