1146. НОД
По заданному
значению n вычислить значение G, где
Через НОД(i, j)
обозначен наибольший общий делитель чисел i
и j.
Для тех, кто не
встречался со знаком суммирования объясняем, что значение G формально по
приведённой формуле вычисляется при помощи следующего кода:
Здесь GCD()
обозначает функцию нахождения наибольшего общего делителя двух чисел.
Вход. Состоит не более чем из 100 строк. Каждая строка содержит
единственное натуральное число n (1
< n < 501). Последняя строка
содержит n = 0 и не обрабатывается.
Выход. Для каждого
входного значения n вывести в
отдельной строке соответствующее значение G.
Пример
входа |
Пример
выхода |
10 100 500 0 |
67 13015 442011 |
теория
чисел
Поскольку n < 501, то задачу можно решить при
помощи двойного цикла, выполнив вычисления по приведенной формуле.
Функция gcd находит
наибольший общий делитель.
int gcd(int
a, int b)
{
return (!b) ?
a : gcd(b,a % b);
}
Основная часть программы. Читаем
входное значение n, вычисляем и
выводим значение суммы g.
while(scanf("%d",&n),
n)
{
g = 0;
for(i = 1; i < n; i++)
for(j = i + 1; j <= n; j++)
g +=
gcd(i,j);
printf("%d\n",g);
}