m do if…»'>
86

Паскаль, задача из контестера, алгоритм евклида задача — Наибольшим общим…

20 февраля 2023

Паскаль, задача из контестера, алгоритм евклида задача — Наибольшим общим делителем (НОД) для двух целых чисел m и n называется наибольший из их общих делителей. Например, для чисел 70 и 105 наибольший общий делитель равен 35. С давних времен известен следующий алгоритм нахождения наибольшего общего делителя двух неотрицательных целых чисел: пока оба числа строго положительны надо из большего числа вычесть меньшее. Результатом работы (наибольшим общим делителем) является большее число после окончания описанной серии вычитаний или 0, если оба числа в конце равны 0. Вам заданы целые неотрицательные a и b (0 ≤ a,b ≤ 10^7). Напишите программу, которая выведет количество вычитаний при работе такого алгоритма и результат его работы. Входные данные Единственная строка входных данных содержит записанные через пробел целые числа a, b (0 ≤ a,b ≤ 107). Выходные данные Выведите количество вычитаний в ходе работы алгоритма и его результат через пробел. Контестер выдает ошибку на 13 тестах из 20. Как написать правильный код? Вот мой изначальный говнокод — var M, N, k, max, min: integer; beginreadln (M, N); k: =0; min: =-1; max: =10000001; if (n>min) and (n< max) and (m>min) and (m 0 dobeginif M>Nthen M: =M-Nelse N: =N-M; k: =k+1; end; if m>n then write (k, ' , M); if m

категория: информатика

54

Var n,m: integer; Begin write ('n,m: '); readln (n,m); While n<>m do if n>m then n: =n-m else m: =m-n; writeln ('NOD=',n); readln; End.

Знаете ответ?

Есть интересный вопрос? Задайте его нашему сообществу, у нас наверняка найдется ответ!
Делитесь опытом и знаниями, зарабатывайте награды и репутацию, заводите новых интересных друзей!
Задавайте интересные вопросы, давайте качественные ответы и зарабатывайте деньги. Подробнее...