Lunatic Never Content (Codeforces 1826B)
Tags: Math, number theory

You have an array $$$a$$$ of $$$n$$$ non-negative integers. Let's define $$$f(a, x) = [a_1 \bmod x, a_2 \bmod x, \dots, a_n \bmod x]$$$ for some positive integer $$$x$$$. Find the biggest $$$x$$$, such that $$$f(a, x)$$$ is a palindrome.Here, $$$a \bmod x$$$ is the remainder of the integer division of $$$a$$$ by $$$x$$$.An array is a palindrome if it reads the same backward as forward. More formally, an array $$$a$$$ of length $$$n$$$ is a palindrome if for every $$$i$$$ ($$$1 \leq i \leq n$$$) $$$a_i = a_{n - i + 1}$$$.

Input: The first line contains a single integer $$$t$$$ ($$$1 \leq t \leq 10^5$$$) — the number of test cases.The first line of each test case contains a single integer $$$n$$$ ($$$1 \leq n \leq 10^5$$$).The second line of each test case contains $$$n$$$ integers $$$a_i$$$ ($$$0 \leq a_i \leq 10^9$$$).It's guaranteed that the sum of all $$$n$$$ does not exceed $$$10^5$$$.

Output: For each test case output the biggest $$$x$$$, such that $$$f(a, x)$$$ is a palindrome. If $$$x$$$ can be infinitely large, output $$$0$$$ instead.

Note: In the first example, $$$f(a, x = 1) = [0, 0]$$$ which is a palindrome.In the second example, $$$f(a, x = 2) = [1, 0, 1, 0, 0, 1, 0, 1]$$$ which is a palindrome.It can be proven that in the first two examples, no larger $$$x$$$ satisfies the condition.In the third example, $$$f(a, x) = [0]$$$ for any $$$x$$$, so we can choose it infinitely large, so the answer is $$$0$$$.

Sample Inputs:
4
2
1 2
8
3 0 1 2 0 3 2 1
1
0
3
100 1 1000000000

Sample Outputs:
1
2
0
999999900

Solution (Python):
import sys, bisect
input = sys.stdin.readline
mod = pow(10, 9) + 7

def gcd(a, b):
    while b:
        (a, b) = (b, a % b)
    return abs(a)
for _ in range(int(input())):
    n = int(input())
    a = list(map(int, input().split()))
    (l, h) = (0, n - 1)
    ans = 0
    while l < h:
        ans = gcd(abs(a[h] - a[l]), ans)
        l += 1
        h -= 1
    print(ans)

Solution (Python):
import io, os
input = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline
from math import gcd
for i in range(int(input())):
    n = int(input())
    x = list(map(int, input().split()))
    c = 0
    for i in range(n // 2):
        c = gcd(abs(x[i] - x[n - i - 1]), c)
    print(c)

Solution (Python):
import sys
input = sys.stdin.readline
import math

def readList():
    return list(map(int, input().split()))

def readInt():
    return int(input())

def readInts():
    return map(int, input().split())

def readStr():
    return input().strip()

def solve():
    (n, arr) = (readInt(), readList())
    (f, b, g) = (0, n - 1, 0)
    while f < b:
        if arr[f] != arr[b]:
            g = abs(arr[b] - arr[f]) if not g else math.gcd(g, abs(arr[b] - arr[f]))
        f += 1
        b -= 1
    return g
for _ in range(int(input())):
    print(solve())