ƏBOB-ların cəmi#6941

ƏBOB-ların cəmi (Həll təhlili)

Hər bir test üçün giriş ədədləri qrupunu massivinə yerləşdiririk. Daha sonra hər bir (i, j)~(0 \le i < j < m) cütü üçün ƏBOB(mas[i], mas[j]) hesablayırıq və onu ümumi cəmlə əlavə edirik.

Nümunə

Üçüncü nümunə üçün cavab bərabərdir

ƏBOB(125,15) + ƏBOB(125,25) + ƏBOB(15,25) = 5 + 25 + 5 = 35

Alqoritmin həyata keçirilməsi

Giriş ədədlərini massivində saxlayırıq.

#define MAX 110
int m[MAX];

gcd funksiyası və ədədlərinin ən böyük ortaq bölənini qaytarır.

int gcd(int a, int b)
{
  return (!b) ? a : gcd(b, a % b);
}

Proqramın əsas hissəsi. Testlərin sayını oxuyuruq.

scanf("%d", &tests);
while (tests--)
{

Hər bir test üçün giriş məlumatlarını oxuyuruq.

  scanf("%d", &n);
  for (i = 0; i < n; i++)
    scanf("%d", &m[i]);

Axtarılan cəmi dəyişənində hesablayırıq.

  res = 0;

Bütün mümkün indeks cütlərini (0 \le i < j < n) sırayla keçirik, hər bir cüt üçün ƏBOB(m[i], m[j]) hesablayırıq və bu qiyməti -ə əlavə edirik.

  for (i = 0; i < n; i++)
  for (j = i + 1; j < n; j++)
    res += gcd(m[i], m[j]);

Cavabı çap edirik.

  printf("%d\n", res);
}

Python icrası

Testlərin sayını oxuyuruq.

tests = int(input())

Hər bir test üçün giriş məlumatlarını oxuyuruq.

for _ in range(tests):
  n, *lst = list(map(int, input().split()))

Axtarılan cəmi dəyişənində hesablayırıq.

  res = 0

Bütün mümkün indeks cütlərini (0 \le i < j < n) sırayla keçirik, hər bir cüt üçün ƏBOB(m[i], m[j]) hesablayırıq və bu qiyməti -ə əlavə edirik.

  for i in range(n):
    for j in range(i + 1, n):
      res += math.gcd(lst[i], lst[j])

Cavabı çap edirik.

  print(res)