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
和6
18
和6
可以转换成12
和6
12
和6
可以转换成6
和6
6
和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】。文章转载请联系作者。
评论