Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- \catcode `\@11 % делаем @ обычной буквой
- \newif\ifdivisible % объявляем булеву переменную
- \newcount\testMod@n % объявляем числовую переменную
- \def\testMod#1#2{ % объявляем макрос с двумя аргументами
- \testMod@n=#1 % помещаем в testMod@n первый аргумент
- \divide\testMod@n by#2 % делим нацело на второй аргумент
- \multiply\testMod@n by#2 % и умножаем на него же
- \ifnum#1=\testMod@n % если в результате получился снова первый аргумент,
- \divisibletrue % значит остатка не было,
- \else % а иначе
- \divisiblefalse % был
- \fi%
- }
- \newcount\divisorpower % здесь будем хранить текущее значение а,
- \newcount\getDivisorPower@m % а здесь - n/d^a
- \def\getDivisorPower#1#2{
- \getDivisorPower@m=#1 % инициализируем переменные
- \divisorpower=0 %
- \testMod{\getDivisorPower@m}{#2} % проверяем, делится ли на d
- \loop\ifdivisible % while-цикл, проверяющий условие divisible
- \advance\divisorpower by1 % увеличиваем a на 1
- \divide\getDivisorPower@m by#2 % делим на d
- \testMod{\getDivisorPower@m}{#2} % снова проверяем, делится ли на d
- \repeat % возвращаемся к началу цикла
- }
- \newcount\numberpower % здесь будем хранить результат возведения в степень
- \newcount\getNumberPower@pow % а здесь - сколько раз еще осталось умножить
- \def\getNumberPower#1#2{
- \numberpower=1 % инициализируем переменные
- \getNumberPower@pow=#2
- \loop\ifnum\getNumberPower@pow>0 % запускаем цикл
- \multiply\numberpower by#1
- \advance\getNumberPower@pow by-1
- \repeat
- }
- \catcode `\@12 % делаем @ обратно спецсимволом,
- % чтобы избежать непосредственного доступа к "локальным" переменным
- % из дальнейшего кода
- \getDivisorPower{600}{2}
- \number\divisorpower
- \getDivisorPower{600}{3}
- \number\divisorpower
- \getDivisorPower{600}{5}
- \number\divisorpower
- \getDivisorPower{600}{7}
- \number\divisorpower
- % должно вывести "3 1 2 0"
- \getNumberPower{5}{0}
- \number\numberpower
- \getNumberPower{6}{1}
- \number\numberpower
- \getNumberPower{7}{2}
- \number\numberpower
- % должно вывести "1 6 49"
- \end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement