在Python中查找一个整数X,它是数组中除一个元素之外所有元素的约数
假设我们有一个数字数组;我们必须找到一个数字B,它是给定数组中除一个元素之外所有元素的约数。我们必须记住所有元素的最大公约数不是1。
因此,如果输入类似于{8, 16, 4, 24},则输出将为8,因为它是除4之外所有元素的约数。
为了解决这个问题,我们将遵循以下步骤:
- n := 数组大小
- 如果n等于1,则
- 返回(array[0] + 1)
- prefix := 一个大小为n的数组,并填充为0
- suffix := 一个大小为n的数组,并填充为0
- prefix[0] := array[0]
- 对于i从1到n,执行
- prefix[i] := (array[i] 和 prefix[i - 1]) 的最大公约数
- suffix[n - 1] := array[n - 1]
- 对于i从n - 2到-1,递减1,执行
- suffix[i] := (suffix[i + 1] 和 array[i]) 的最大公约数
- 对于i从0到n + 1,执行
- cur := 0
- 如果i等于0,则
- cur := suffix[i + 1]
- 否则,如果i等于n - 1,则
- cur := prefix[i - 1]
- 否则,
- cur := (prefix[i - 1] 和 suffix[i + 1]) 的最大公约数
- 如果 array[i] mod cur 不等于 0,则
- 返回 cur
- 返回 0
示例代码
让我们看看下面的实现以更好地理解:
from math import gcd def getDivisor(array): n = len(array) if (n == 1): return (array[0] + 1) prefix = [0] * n suffix = [0] * n prefix[0] = array[0] for i in range(1, n): prefix[i] = gcd(array[i], prefix[i - 1]) suffix[n - 1] = array[n - 1] for i in range(n - 2, -1, -1): suffix[i] = gcd(suffix[i + 1], array[i]) for i in range(0, n + 1): cur = 0 if (i == 0): cur = suffix[i + 1] elif (i == n - 1): cur = prefix[i - 1] else: cur = gcd(prefix[i - 1], suffix[i + 1]) if (array[i] % cur != 0): return cur return 0; array = [8, 16, 4, 24] print(getDivisor(array))
输入
[8, 16, 4, 24]
输出
8
广告