PRINT PRINT " A' = g ( A, x ) = A^x" PRINT PRINT " B' = f ( B, x ) = MOD ( B^x, n )" PRINT PRINT "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" PRINT FOR x=2 TO 5 PRINT " ";x;":"; PRINT USING "####### ####### ####### ####### ####### ####### ####### ####### #######":x,x^2,x^3,x^4,x^5,x^6,x^7,x^8 PRINT NEXT x FOR i=2 TO 3 FOR j=i+1 TO 7 IF j=4 OR j=6 THEN GOTO 20 IF i=3 AND j>5 THEN GOTO 20 LET n=i*j PRINT "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" PRINT PRINT "i =";i;" j =";j;" n = i * j =";n;" ";n;"で割った余り:" PRINT FOR x=2 TO 5 PRINT " ";x;":"; PRINT USING "####### ####### ####### ####### ####### ####### ####### ####### #######":MOD(x,n),MOD(x^2,n),MOD(x^3,n),MOD(x^4,n),MOD(x^5,n),MOD(x^6,n),MOD(x^7,n),MOD(x^8,n),MOD(x^9,n) PRINT NEXT x PRINT " * (i-1) * (j-1) = ";(i-1)*(j-1);" → 1 列目 と";(i-1)*(j-1)+1;"列目 は、無変換 と同じ。" PRINT 20 NEXT j NEXT i END ################################################################################ OPTION ARITHMETIC DECIMAL_HIGH PRINT PRINT "< 2つの素数の積で表される数を 法 とする べき乗剰余数 >" PRINT PRINT " 自然数 A についての n を 法 とし b を べき乗数 とする べき乗剰余数(B)" PRINT " B = MOD ( A^b , n )" PRINT INPUT PROMPT "法の因数となる素数その1? ":S INPUT PROMPT "法の因数となる素数その2? ":T PRINT LET n=S*T CALL KOUBAI(S-1,T-1,W) PRINT S;"- 1 と";T;"- 1 との 最小公倍数は";W;"です。" PRINT PRINT " 全ての自然数についての";n;"を法とする べき乗剰余数 が" PRINT "その自然数に等しくなる べき乗数 は、" FOR i=1 TO 10 PRINT " ";i*W+1; NEXT i PRINT " ・・・・・・" PRINT FOR i=1 TO 10 IF i=n THEN EXIT FOR FOR j=1 TO 10 LET L=MOD(i^(j*W+1),n) PRINT i;"についての";n;"を法とし";j*W+1;"をべき乗数とする べき乗剰余数 は";L;"です。" PRINT NEXT j NEXT i PRINT END EXTERNAL SUB KOUBAI(X,Y,Z) ! X と Y の最小公倍数 Z を求める。 OPTION ARITHMETIC DECIMAL_HIGH IF X=Y THEN GOTO 20 LET X=Y LET Y=R GOTO 10 END SUB ################################################################################ OPTION ARITHMETIC DECIMAL_HIGH FUNCTION PrimeQ(n) ! 素数判定 1 : 素数、 0 : 素数でない LET PrimeQ=0 IF n<2 OR n<>INT(n) THEN EXIT FUNCTION IF MOD(n,2)=0 THEN IF n=2 THEN LET PrimeQ=1 ELSE LET k=3 DO WHILE k*k<=n IF MOD(n,k)=0 THEN EXIT FUNCTION LET k=k+2 LOOP LET PrimeQ=1 END IF END FUNCTION PRINT PRINT "< 2つの素数の積で表される数を 法 とする べき乗剰余数 >" PRINT PRINT " 自然数 A についての n を 法 とし b を べき乗数 とする べき乗剰余数(B)" PRINT " B = MOD ( A^b , n )" PRINT INPUT PROMPT "法の因数としての素数その1? ":S INPUT PROMPT "法の因数としての素数その2? ":T PRINT LET n=S*T CALL KOUBAI(S-1,T-1,W) PRINT S;"- 1 と";T;"- 1 との 最小公倍数は";W;"です。" PRINT PRINT " n =";n;"未満の全ての自然数についての";n;"を法とし b をべき乗数とする べき乗剰余数 が" PRINT "その自然数に等しくなるとき、べき乗数 b は、小さい順に次のようになります。" PRINT FOR i=1 TO 9 PRINT " ";i*W+1; NEXT i PRINT " ・・・・・・" PRINT PRINT "注意: こっそりと伝えたい自然数は、法より小さくて、法とは互いに素の数にしてください。" PRINT INPUT PROMPT "こっそりと伝えたい自然数? ":A PRINT FOR j=1 TO W+1 IF PrimeQ(j)=0 THEN GOTO 10 FOR i=1 TO 10 IF INT((i*W+1)/j)=(i*W+1)/j THEN IF i*W+1<>j^2 THEN IF PrimeQ((i*W+1)/j)=1 THEN LET L=MOD(A^j,n) LET R=MOD(L^((i*W+1)/j),n) PRINT "暗号化用べき乗数 ="; PRINT USING "###":j PRINT "暗号化数(べき乗剰余数)="; PRINT USING "###":L; PRINT " = MOD (";A;"^";j;",";n;")" PRINT "解読化用べき乗数 ="; PRINT USING "###":(i*W+1)/j; PRINT " (";j;"×";(i*W+1)/j;"=";i*W+1;")" PRINT "解読化数(べき乗剰余数)="; PRINT USING "###":R; PRINT " = MOD (";L;"^";(i*W+1)/j;",";n;")" PRINT END IF END IF END IF NEXT i 10 NEXT j END EXTERNAL SUB KOUBAI(X,Y,Z) ! X と Y の最小公倍数 Z を求める。 OPTION ARITHMETIC DECIMAL_HIGH IF X=Y THEN GOTO 20 LET X=Y LET Y=R GOTO 10 END SUB