Возведение в степень и деление по модулю (в полях Галуа), поиск НОД, разложение на множители (SRP-325G)

Для Citizen SRP-325G. Сейчас этого калькулятора у меня уже нет, но программы от него остались и может быть кому-либо окажуться полезны.

-----------------------------------------------------------------------------------------
Возведение в степень по модулю
-----------------------------------------------------------------------------------------
PROGRAM (D=A^BmodC)
Program type – MAIN

PRINT “A^B%C”;SLEEP(2)
INPUT A,B,C
D=1
FOR(E=B/2;E≥.5;E=E/2){IF(Frac(E)>0)THEN{D=DA-INT(DA/C)C}
A=A2-INT(A2/C)C;E=INT(E)}
PRINT D
END

----------------------------------------------------------------------------------------
Деление по модулю
-----------------------------------------------------------------------------------------
PROGRAM (D=(A/B)modC)
Program type – MAIN

PRINT “A/B%C”;SLEEP(2)
INPUT A,B,C
D=1;E=0;G=C;J=B
FOR(I=0;J>0;I++){H=Int(B/G);J=B-HG
IF(I≠0)THEN{F=DH+E;E=D;D=F}
B=G;G=J}
IF(Frac(I/2)≠0)THEN{E=C-E}
D=AE-Int(AE/C)C
PRINT D,” NOD=”,B
END

Примечание: Результат деления имеет смысл, если НОД = 1.
----------------------------------------------------------------------------------------
Поиск наибольшего общего делителя
-----------------------------------------------------------------------------------------
PROGRAM НОД(A,B)
Program type – MAIN

PRINT ”NOD(A,B)”;SLEEP(2)
INPUT A,B
FOR(C=A;C>0;C=A-INT(A/B)B){A=B;B=C}
PRINT “B”
END

---------------------------------------------------------------------------------------
Разложение на множители перебором
---------------------------------------------------------------------------------------
PROGRAM FACTORISATION
Program type – MAIN

PRINT ”FACT A”;SLEEP(1)
INPUT A
C=sqrt(A);D=0
FOR(B=2;B<=C;B++){IF(Frac(A/B)==0)THEN{A=A/B
PRINT B;SLEEP(2)
E[D]=B;D++;B--}}
PRINT A;E[D]=A
END

---------------------------------------------------------------------------------------
Все эти программы одновременно помещаются в память SRP-325G

Метки публикаций: 
Undefined