Задача о системах счисления - Pascal
Формулировка задачи:
Дано число Х(1 ≤ X ≤ 10^12) в десятичной системе счисления
Вывести систему счисления с минимальной основой, в которой число Х будет иметь одинаковые цифры.
Пример:
3 ----2
1. «3» – это «11» в системе счисления с основой 2.
Решение задачи: «Задача о системах счисления»
textual
Листинг программы
program test; var x: uint64; Base: uint64; Dividend, Remainder, LastDigit: uint64; Res: boolean; XisPrime: boolean; begin readln(X); XisPrime := True; Base := 2; while Base < X do begin Res := True; Dividend := X; LastDigit := X mod Base; XisPrime := XisPrime and (LastDigit <> 0); repeat Remainder := Dividend mod Base; Dividend := Dividend div Base; Res := Res and (Remainder = LastDigit); until Dividend = 0; if Res then break; Inc(Base); if (Base > round(sqrt(X))) and XisPrime then Base := X - 1; end; writeln(Base); end.
Объяснение кода листинга программы
- Объявляется переменная
xтипа uint64. - Объявляется переменная
Baseтипа uint64. - Объявляются переменные
Dividend,Remainder,LastDigitтипа uint64. - Объявляется переменная
Resтипа boolean. - Объявляется переменная
XisPrimeтипа boolean и инициализируется значением True. - Считывается значение переменной
xс помощью функции readln. - Устанавливается значение переменной
XisPrimeкак True. - Устанавливается начальное значение переменной
Baseкак 2. - Создается цикл while, который выполняется пока
BaseменьшеX. - Внутри цикла устанавливается значение переменной
Resкак True. Dividendустанавливается равнымx.LastDigitустанавливается равным остатку от деленияxнаBase.- Переменная
XisPrimeустанавливается как логическое И между ее текущим значением и проверкой, чтоLastDigitне равен 0. - Происходит цикл repeat-until, в котором вычисляется остаток от деления
DividendнаBase, далееDividendделится наBase. - Переменная
Resустанавливается как логическое И между ее текущим значением и проверкой, что остаток равенLastDigit. - Цикл повторяется, пока
Dividendне равно 0. - Если
Resистинно, то программа выходит из цикла. - Увеличивается значение переменной
Baseна 1. - Если
Baseбольше, чем целая часть от квадратного корня изXиXisPrimeистинно, тоBaseустанавливается равнымX - 1. - Значение
Baseвыводится с помощью функции writeln.