Найти НОД с наибольшей суммой цифр - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Думаю условие понятное, можно только пояснить на примере. НОД чисел 220 и 440 это 220, а с наибольшей суммой цифр 55. и еще (1<=a,b<=10^9) Достаточно будет алгоритма, думаю с кодом проблем особых не будет.

Решение задачи: «Найти НОД с наибольшей суммой цифр»

textual
Листинг программы
function gcd(const a, b: LongInt): LongInt;
begin
  if b = 0 then gcd := a else gcd := gcd(b, a mod b); 
end;
 
function sum_dig(num: LongInt): LongInt;
var sum: LongInt;
begin
  sum := 0;
  while num > 0 do begin
    sum := sum + num mod 10;
    num := num div 10;
  end;
  sum_dig := sum;
end;
 
var a, b, g, i, ans, max_sum, sum: LongInt;
begin
  Readln(a, b);
  max_sum := 0; 
  g := gcd(a, b);
  for i := 1 to Round(sqrt(g)) do 
    if g mod i = 0 then begin
      sum := sum_dig(i);
      if sum > max_sum then begin
        max_sum := sum;
        ans := i;
      end;
      sum := sum_dig(g div i);
      if sum > max_sum then begin
        max_sum := sum;
        ans := g div i;
      end;
    end;
  Writeln(ans);
end.

Объяснение кода листинга программы

  1. Создается функция gcd, которая принимает два аргумента типа LongInt и возвращает наибольший общий делитель этих двух чисел. Алгоритм Евклида используется для нахождения НОДа.
  2. Создается функция sum_dig, которая принимает один аргумент типа LongInt и возвращает сумму цифр этого числа. Функция использует цикл while для сложения цифр числа последовательно.
  3. Создается переменная a и b для хранения введенных пользователем чисел.
  4. Вызывается функция gcd с аргументами a и b и сохраняется результат в переменной g.
  5. Инициализируется переменная max_sum значением 0.
  6. Запускается цикл for, который выполняется от 1 до округленного значения квадратного корня из g.
  7. В каждой итерации цикла проверяется, делится ли g на текущее значение i без остатка. Если да, то вызывается функция sum_dig с аргументом i, и если сумма цифр больше max_sum, то обновляется значение max_sum и ans устанавливается равным i.
  8. После завершения цикла, значение max_sum будет содержать наибольший общий делитель, а значение ans будет содержать соответствующий делитель.
  9. Выводится значение ans.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы