OPTION ARITHMETIC RATIONAL ! 有理数モード(多桁整数) RANDOMIZE PRINT PRINT "< ポラード・ロー素因数分解法 >" PRINT "ランダムに作った自然数 : 4桁の素数 × 4桁の素数" DIM A(1062) LET C=1 FOR i=1000 TO 10000 IF SOSU(i)=1 THEN LET A(C)=i LET C=C+1 END IF NEXT i LET r1 = ROUND(RND*(C-1)) LET r2 = ROUND(RND*(C-1)) PRINT "ランダムに作った自然数 : ";A(r1)*A(r2); " = ";A(r1);" * ";A(r2) PRINT PRINT "ポラード・ロー素因数分解法により見つけた約数" LET N=A(r1)*A(r2) LET X=2 LET Y=2 LET D=1 DO WHILE D=1 LET X=F(X,N) LET Y=F(F(Y,N),N) LET D=GCD(ABS(X-Y),N) LOOP IF D<>N THEN PRINT " ";D;"  ";N/D ELSE PRINT "失敗" END IF END EXTERNAL FUNCTION F(x,m) OPTION ARITHMETIC RATIONAL LET F=MOD(x^2+1,m) END FUNCTION EXTERNAL FUNCTION SOSU(x) OPTION ARITHMETIC RATIONAL IF x=1 THEN LET SOSU=-1 ELSEIF x=2 THEN LET SOSU=1 ELSE LET SOSU=1 FOR i=2 TO x-1 IF MOD(x,i)=0 THEN LET SOSU=-1 EXIT FOR END IF NEXT i END IF END FUNCTION