Turtle Tenacity: Continual Mods (Codeforces 1933D)
Tags: Greedy, number theory

Given an array $$$a_1, a_2, \ldots, a_n$$$, determine whether it is possible to rearrange its elements into $$$b_1, b_2, \ldots, b_n$$$, such that $$$b_1 \bmod b_2 \bmod \ldots \bmod b_n \neq 0$$$.Here $$$x \bmod y$$$ denotes the remainder from dividing $$$x$$$ by $$$y$$$. Also, the modulo operations are calculated from left to right. That is, $$$x \bmod y \bmod z = (x \bmod y) \bmod z$$$. For example, $$$2024 \bmod 1000 \bmod 8 = (2024 \bmod 1000) \bmod 8 = 24 \bmod 8 = 0$$$.

Input: The first line of the input contains a single integer $$$t$$$ ($$$1 \le t \le 10^4$$$) — the number of test cases.The first line of each test case contains a single integer $$$n$$$ ($$$2 \le n \le 10^5$$$).The second line of each test case contains $$$n$$$ integers $$$a_1, a_2, \ldots, a_n$$$ ($$$1 \le a_i \le 10^9$$$).The sum of $$$n$$$ over all test cases does not exceed $$$2 \cdot 10^5$$$.

Output: For each test case, output "YES" if it is possible, "NO" otherwise.You can output the answer in any case (upper or lower). For example, the strings "yEs", "yes", "Yes", and "YES" will be recognized as positive responses.

Note: In the first test case, rearranging the array into $$$b = [1, 2, 3, 4, 5, 6]$$$ (doing nothing) would result in $$$1 \bmod 2 \bmod 3 \bmod 4 \bmod 5 \bmod 6 = 1$$$. Hence it is possible to achieve the goal.In the second test case, the array $$$b$$$ must be equal to $$$[3, 3, 3, 3, 3]$$$, which would result in $$$3 \bmod 3 \bmod 3 \bmod 3 \bmod 3 = 0$$$. Hence it is impossible to achieve the goal.In the third test case, rearranging the array into $$$b = [3, 2, 2]$$$ would result in $$$3 \bmod 2 \bmod 2 = 1$$$. Hence it is possible to achieve the goal.

Sample Inputs:
8
6
1 2 3 4 5 6
5
3 3 3 3 3
3
2 2 3
5
1 1 2 3 7
3
1 2 2
3
1 1 2
6
5 2 10 10 10 2
4
3 6 9 3

Sample Outputs:
YES
NO
YES
NO
YES
NO
YES
NO

Solution (Python):
from sys import stdin, stdout

def pr(out):
    return stdout.write(f'{out}\n')

def ver_in():
    return stdin.readline()

def hor_in():
    return list(map(int, stdin.readline().split()))

def solve():
    n = int(input())
    nums = hor_in()
    nums.sort()
    can_mod = nums[0] != nums[1]
    for i in range(1, n):
        if nums[i] % nums[0]:
            can_mod = True
            break
    if can_mod:
        print('YES')
    else:
        print('NO')
if __name__ == '__main__':
    t = int(ver_in())
    for _ in range(t):
        solve()

Solution (Python):
from collections import *
from math import *
from heapq import *
import sys
from os import path

def input():
    return sys.stdin.readline().strip()

def input_int():
    return int(input())

def input_list(delimiter=' '):
    return list(map(int, input().split(delimiter)))

def input_string():
    return input()

def solve():
    n = input_int()
    A = input_list()
    A.sort()
    min_count = A.count(A[0])
    if min_count == 1:
        return 'yes'
    for i in range(1, len(A)):
        if A[i] % A[0]:
            return 'yes'
    return 'no'

def main():
    testcases = input_int()
    for _ in range(testcases):
        print(solve())
if __name__ == '__main__':
    if path.exists('input.txt'):
        sys.stdin = open('input.txt', 'r')
        sys.stdout = open('output.txt', 'w')
    main()

Solution (Python):
import sys
from os import path

def input():
    return sys.stdin.readline().strip()

def solve(n, arr):
    arr.sort()
    if arr[0] != arr[1]:
        return 'YES'
    for v in arr:
        if v % arr[0]:
            return 'YES'
    return 'NO'

def main():
    T = int(input())
    for _ in range(T):
        n = int(input())
        arr = list(map(int, input().split()))
        print(solve(n, arr))
if __name__ == '__main__':
    if path.exists('input.txt'):
        sys.stdin = open('input.txt', 'r')
    main()