|
> No.1157[元記事へ]
永野護さんへのお返事です。
!ご参考に。下記を、走らせてみてください。
!※素数判定は、速度に余裕が大きく仮なので、別途ご研究下さい。
!
!※「a が n の倍数でない」「a と n が互いに素」を区別しない説明サイトが目立ちます。
!◆フェルマーの小定理
!
! n が素数なら、n の倍数でない整数 a で、mod( a^(n-1), n)=1 を満たす。
!
! しかし、逆に、上の条件と式を満たす n は素数だけでなく、余計がある。
! その余計を、擬素数とよぶ。(素数でないが、それに準ずる意。)
!--------------------------------------------------------------------
OPTION ARITHMETIC RATIONAL !有理数モード
PRINT " a: 素数でないnで、mod(a^(n-1),n)=1 のn"
PRINT "↓: ---------------------------------------"
FOR a=2 TO 15 ! a=11~15 は、有理数モードでないと1000 桁でもオーバーフロー。
PRINT USING "##:":a;
!!FOR n=4 TO 1000 !(偶数奇数の両方)走査するnは、素数 が対象外なので、最小値4から~1000
FOR n=5 TO 1000 STEP 2 !(奇数のみ)最小5から・・・ 下表と比較するとき。
IF 0< MOD(a,n) AND MOD(a^(n-1),n)=1 AND 1< Pri(n) THEN PRINT USING "####":n; !素数でないnのみ表示。
NEXT n
PRINT
NEXT a
FUNCTION Pri(n)
FOR i=CEIL(n/2) TO 2 STEP -1
IF MOD(n,i)=0 THEN EXIT FOR
NEXT i
LET Pri=i !素数は i=1 まで下がる。
END FUNCTION
END !※上のプログラムで出来た表から、奇数のnだけを見れば下表に一致します。
!表1. 1000 以下の奇数の擬素数と,それが 1000 以下の奇数の合成数に占める割合
! 底 1000 以下の奇数の擬素数 割合
! 2 341, 561, 645 0.9%
! 3 91, 121, 671, 703, 949 1.5%
! 4 15, 85, 91, 341, 435, 451, 561, 645, 703 2.7%
! 5 217, 561, 781 0.9%
! 6 35, 185, 217, 301, 481 1.5%
! 7 25, 325, 561, 703, 817 1.5%
! 8 9, 21, 45, 63, 65, 105, 117, 133, 153, 231, 273,
! 341, 481, 511, 561, 585, 645, 651, 861, 949 6.0%
! 9 91, 121, 205, 511, 671, 697, 703, 949 2.4%
! 10 9, 33, 91, 99, 259, 451, 481, 561, 657, 703, 909 3.3%
! 11 15, 133, 259, 305, 481, 645, 703, 793 2.4%
! 12 65, 91, 133, 143, 145, 247, 377, 385, 703 2.7%
! 13 21, 85, 105, 231, 357, 427, 561 2.1%
! 14 15, 39, 65, 195, 481, 561, 781, 793, 841, 985 3.0%
! 15 341 0.3%
|
|