Для кожного тесту занесемо набір вхідних чисел у масив . Далі для кожної пари (i, j)~(0 \le i < j < m) обчислюємо НОД(mas[i], mas[j]) і додаємо його до загальної суми.
Приклад
Для третього прикладу відповідь дорівнює
Реалізація алгоритму
Вхідні числа зберігаємо у масиві .
#define MAX 110
int m[MAX];Функція gcd повертає найбільший спільний дільник чисел і .
int gcd(int a, int b)
{
return (!b) ? a : gcd(b, a % b);
}Основна частина програми. Читаємо кількість тестів .
scanf("%d", &tests);
while (tests--)
{Читаємо вхідні дані для кожного тесту.
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &m[i]);В змінній підраховуємо потрібну суму.
res = 0;Перебираємо всі можливі пари індексів таких що 0 \le i < j < n, для кожної пари обчислюємо НОД(m[i], m[j]) і додаємо це значення до .
for (i = 0; i < n; i++)
for (j = i + 1; j < n; j++)
res += gcd(m[i], m[j]);Виводимо відповідь.
printf("%d\n", res);
}Python реалізація
Читаємо кількість тестів .
tests = int(input())Читаємо вхідні дані для кожного тесту.
for _ in range(tests):
n, *lst = list(map(int, input().split()))В змінній підраховуємо потрібну суму.
res = 0Перебираємо всі можливі пари індексів таких що 0 \le i < j < n, для кожної пари обчислюємо НОД(m[i], m[j]) і додаємо це значення до .
for i in range(n):
for j in range(i + 1, n):
res += math.gcd(lst[i], lst[j])Виводимо відповідь.
print(res)