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

| рубрика «Программы» | автор basvic
Метки: , ,

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

Возведение в степень по модулю

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