> For the complete documentation index, see [llms.txt](https://jimmylin1991.gitbook.io/practice-of-algorithm-problems/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jimmylin1991.gitbook.io/practice-of-algorithm-problems/math/1250.-check-if-it-is-a-good-array.md).

# 1250. Check If It Is a Good Array

Given an array `nums` of positive integers. Your task is to select some subset of `nums`, multiply each element by an integer and add all these numbers. The array is said to be **good** if you can obtain a sum of `1` from the array by any possible subset and multiplicand.

Return `True` if the array is **good** otherwise return `False`.

**Example 1:**

```
Input: nums = [12,5,7,23]
Output: true
Explanation: Pick numbers 5 and 7.
5*3 + 7*(-2) = 1
```

**Example 2:**

```
Input: nums = [29,6,10]
Output: true
Explanation: Pick numbers 29, 6 and 10.
29*1 + 6*(-3) + 10*(-1) = 1
```

**Example 3:**

```
Input: nums = [3,6]
Output: false
```

**Constraints:**

* `1 <= nums.length <= 10^5`
* `1 <= nums[i] <= 10^9`

{% hint style="info" %}
對任意整數x, y，可以利用任意整數a, b使得ax + by = gcd(x, y)
{% endhint %}

```cpp
bool isGoodArray(vector<int>& nums) {
    int x = nums[0], y;
    for (int num : nums) {
        while (num > 0) {
            y = x % num;
            x = num;
            num = y;
        }
    }
    return x == 1;
}
```

```cpp
bool isGoodArray(vector<int>& nums) {
    int res = nums[0];
    for (int num : nums) {
        res = gcd(res, num);
    }
    return res == 1;
}
```
