100までの素数

 投稿者:しばっち  投稿日:2009年 9月27日(日)13時52分56秒
  自然数100までの素数(?)を求める


PUBLIC NUMERIC N
LET N=10 !'探索範囲 (+n+ni+nj+nj+nk..)~(-n-ni-nj-nj-nk..)  (i,j,k...は虚数単位)
DO
   READ L
   IF L=0 THEN STOP
   DATA 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97
   DATA 0
   PRINT L;":";
   IF CHECK(L)=1 THEN PRINT "素数"
LOOP
END

EXTERNAL  FUNCTION CHECK(L) !'オクトニオン(8元数)探索  (8重ループ)
OPTION BASE 0
DIM X(15),Y(15),Z(15)
LET X(0)=L
FOR H=0 TO N
   FOR S8=1 TO -1 STEP -2
      LET Y(7)=H*S8
      FOR G=0 TO N
         FOR S7=1 TO -1 STEP -2
            LET Y(6)=G*S7
            FOR F=0 TO N
               FOR S6=1 TO -1 STEP -2
                  LET Y(5)=F*S6
                  FOR E=0 TO N
                     FOR S5=1 TO -1 STEP -2
                        LET Y(4)=E*S5
                        FOR D=0 TO N
                           FOR S4=1 TO -1 STEP -2
                              LET Y(3)=D*S4
                              FOR C=0 TO N
                                 FOR S3=1 TO -1 STEP -2
                                    LET Y(2)=C*S3
                                    FOR B=0 TO N
                                       FOR S2=1 TO -1 STEP -2
                                          LET Y(1)=B*S2
                                          FOR A=0 TO N
                                             FOR S1=1 TO -1 STEP -2
                                                LET Y(0)=A*S1
                                                IF COMP(Y)=0 THEN
                                                   CALL CDIV(X,Y,Z)
                                                   IF COMP(Z)=0 THEN
                                                      LET FR=0
                                                      FOR I=0 TO 15
                                                         IF FRAC(Z(I))<>0 THEN
                                                            LET FR=1
                                                            EXIT FOR
                                                         END IF
                                                      NEXT I
                                                      IF FR=0 THEN
                                                         PRINT "{";
                                                         CALL CPRINT(Y)
                                                         PRINT ",";
                                                         CALL CPRINT(Z)
                                                         PRINT "}"
                                                         LET CHECK=0
                                                         EXIT FUNCTION !'見つけ次第ループ打ち切り
                                                      END IF
                                                   END IF
                                                END IF
                                             NEXT  S1
                                          NEXT  A
                                       NEXT  S2
                                    NEXT  B
                                 NEXT  S3
                              NEXT C
                           NEXT  S4
                        NEXT  D
                     NEXT  S5
                  NEXT  E
               NEXT  S6
            NEXT  F
         NEXT  S7
      NEXT  G
   NEXT   S8
NEXT  H
LET CHECK=1
END FUNCTION

EXTERNAL  FUNCTION COMP(Y())
OPTION BASE 0
DIM Z(15)
FOR I=1 TO 16
   LET FL=0
   MAT READ Z
   DATA  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 !'0
   DATA  1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 !'1
   DATA -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   DATA 0, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 !'i
   DATA 0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   DATA 0,0, 1,0,0,0,0,0,0,0,0,0,0,0,0,0 !'j
   DATA 0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0
   DATA 0,0,0, 1,0,0,0,0,0,0,0,0,0,0,0,0 !'k
   DATA 0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0
   DATA 0,0,0,0, 1,0,0,0,0,0,0,0,0,0,0,0 !'l
   DATA 0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0
   DATA 0,0,0,0,0, 1,0,0,0,0,0,0,0,0,0,0 !'m
   DATA 0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0
   DATA 0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0,0 !'n
   DATA 0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0
   DATA 0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0 !'o
   DATA 0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0
   !'DATA 0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0
   !'DATA 0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0
   !'DATA 0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0
   !'DATA 0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0
   !'DATA 0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0
   !'DATA 0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0
   !'DATA 0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0
   !'DATA 0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0
   !'DATA 0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0
   !'DATA 0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0
   !'DATA 0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0
   !'DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0
   !'DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0
   !'DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0
   !'DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1
   !'DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1
   FOR J=0 TO 15
      IF Y(J)=Z(J) THEN LET FL=FL+1 !'0,±1,±i,±j,±k...は約数(?)ではない
   NEXT J
   IF FL=16 THEN
      LET COMP=1
      EXIT FUNCTION
   END IF
NEXT I
LET COMP=0
END FUNCTION

EXTERNAL  FUNCTION FRAC(X) !'小数部
LET FRAC=X-INT(X)
END FUNCTION

EXTERNAL  SUB CDIV(A(),B(),C())
OPTION BASE 0
DIM BB(15),S(15)
CALL CCONJ(B,BB)
CALL CMUL(B,BB,S)
CALL CMUL(A,BB,C)
MAT C=(1/S(0))*C
END SUB

EXTERNAL  SUB CCONJ(A(),B()) !'共役数
LET B(0)=A(0)
FOR I=1 TO 15
   LET B(I)=-A(I)
NEXT I
END SUB

EXTERNAL  SUB CPRINT(A())
FOR I=0 TO 15
   IF A(I)<>0 THEN
      IF A(I)<0 THEN
         PRINT " - ";
      ELSE
         IF I>0 THEN PRINT " + ";
      END IF
      IF ABS(A(I))<>1 OR I=0 THEN PRINT STR$(ABS(A(I)));
      IF I>0 THEN PRINT MID$("ijklmnopqrstuvw",I,1);
   END IF
NEXT I
END SUB

EXTERNAL  SUB CMUL(A(),B(),S())
LET S(0)=A(0)*B(0)-A(1)*B(1)-A(2)*B(2)-A(3)*B(3)-A(4)*B(4)-A(5)*B(5)-A(6)*B(6)-A(7)*B(7)-A(8)*B(8)-A(9)*B(9)-A(10)*B(10)-A(11)*B(11)-A(12)*B(12)-A(13)*B(13)-A(14)*B(14)-A(15)*B(15)
LET S(1)=A(0)*B(1)+A(1)*B(0)+A(2)*B(3)-A(3)*B(2)+A(4)*B(5)-A(5)*B(4)-A(6)*B(7)+A(7)*B(6)+A(8)*B(9)-A(9)*B(8)-A(10)*B(11)+A(11)*B(10)-A(12)*B(13)+A(13)*B(12)+A(14)*B(15)-A(15)*B(14)
LET S(2)=A(0)*B(2)-A(1)*B(3)+A(2)*B(0)+A(3)*B(1)+A(4)*B(6)+A(5)*B(7)-A(6)*B(4)-A(7)*B(5)+A(8)*B(10)+A(9)*B(11)-A(10)*B(8)-A(11)*B(9)-A(12)*B(14)-A(13)*B(15)+A(14)*B(12)+A(15)*B(13)
LET S(3)=A(0)*B(3)+A(1)*B(2)-A(2)*B(1)+A(3)*B(0)+A(4)*B(7)-A(5)*B(6)+A(6)*B(5)-A(7)*B(4)+A(8)*B(11)-A(9)*B(10)+A(10)*B(9)-A(11)*B(8)-A(12)*B(15)+A(13)*B(14)-A(14)*B(13)+A(15)*B(12)
LET S(4)=A(0)*B(4)-A(1)*B(5)-A(2)*B(6)-A(3)*B(7)+A(4)*B(0)+A(5)*B(1)+A(6)*B(2)+A(7)*B(3)+A(8)*B(12)+A(9)*B(13)+A(10)*B(14)+A(11)*B(15)-A(12)*B(8)-A(13)*B(9)-A(14)*B(10)-A(15)*B(11)
LET S(5)=A(0)*B(5)+A(1)*B(4)-A(2)*B(7)+A(3)*B(6)-A(4)*B(1)+A(5)*B(0)-A(6)*B(3)+A(7)*B(2)+A(8)*B(13)-A(9)*B(12)+A(10)*B(15)-A(11)*B(14)+A(12)*B(9)-A(13)*B(8)+A(14)*B(11)-A(15)*B(10)
LET S(6)=A(0)*B(6)+A(1)*B(7)+A(2)*B(4)-A(3)*B(5)-A(4)*B(2)+A(5)*B(3)+A(6)*B(0)-A(7)*B(1)+A(8)*B(14)-A(9)*B(15)-A(10)*B(12)+A(11)*B(13)+A(12)*B(10)-A(13)*B(11)-A(14)*B(8)+A(15)*B(9)
LET S(7)=A(0)*B(7)-A(1)*B(6)+A(2)*B(5)+A(3)*B(4)-A(4)*B(3)-A(5)*B(2)+A(6)*B(1)+A(7)*B(0)+A(8)*B(15)+A(9)*B(14)-A(10)*B(13)-A(11)*B(12)+A(12)*B(11)+A(13)*B(10)-A(14)*B(9)-A(15)*B(8)
LET S(8)=A(0)*B(8)-A(1)*B(9)-A(2)*B(10)-A(3)*B(11)-A(4)*B(12)-A(5)*B(13)-A(6)*B(14)-A(7)*B(15)+A(8)*B(0)+A(9)*B(1)+A(10)*B(2)+A(11)*B(3)+A(12)*B(4)+A(13)*B(5)+A(14)*B(6)+A(15)*B(7)
LET S(9)=A(0)*B(9)+A(1)*B(8)-A(2)*B(11)+A(3)*B(10)-A(4)*B(13)+A(5)*B(12)+A(6)*B(15)-A(7)*B(14)-A(8)*B(1)+A(9)*B(0)-A(10)*B(3)+A(11)*B(2)-A(12)*B(5)+A(13)*B(4)+A(14)*B(7)-A(15)*B(6)
LET S(10)=A(0)*B(10)+A(1)*B(11)+A(2)*B(8)-A(3)*B(9)-A(4)*B(14)-A(5)*B(15)+A(6)*B(12)+A(7)*B(13)-A(8)*B(2)+A(9)*B(3)+A(10)*B(0)-A(11)*B(1)-A(12)*B(6)-A(13)*B(7)+A(14)*B(4)+A(15)*B(5)
LET S(11)=A(0)*B(11)-A(1)*B(10)+A(2)*B(9)+A(3)*B(8)-A(4)*B(15)+A(5)*B(14)-A(6)*B(13)+A(7)*B(12)-A(8)*B(3)-A(9)*B(2)+A(10)*B(1)+A(11)*B(0)-A(12)*B(7)+A(13)*B(6)-A(14)*B(5)+A(15)*B(4)
LET S(12)=A(0)*B(12)+A(1)*B(13)+A(2)*B(14)+A(3)*B(15)+A(4)*B(8)-A(5)*B(9)-A(6)*B(10)-A(7)*B(11)-A(8)*B(4)+A(9)*B(5)+A(10)*B(6)+A(11)*B(7)+A(12)*B(0)-A(13)*B(1)-A(14)*B(2)-A(15)*B(3)
LET S(13)=A(0)*B(13)-A(1)*B(12)+A(2)*B(15)-A(3)*B(14)+A(4)*B(9)+A(5)*B(8)+A(6)*B(11)-A(7)*B(10)-A(8)*B(5)-A(9)*B(4)+A(10)*B(7)-A(11)*B(6)+A(12)*B(1)+A(13)*B(0)+A(14)*B(3)-A(15)*B(2)
LET S(14)=A(0)*B(14)-A(1)*B(15)-A(2)*B(12)+A(3)*B(13)+A(4)*B(10)-A(5)*B(11)+A(6)*B(8)+A(7)*B(9)-A(8)*B(6)-A(9)*B(7)-A(10)*B(4)+A(11)*B(5)+A(12)*B(2)-A(13)*B(3)+A(14)*B(0)+A(15)*B(1)
LET S(15)=A(0)*B(15)+A(1)*B(14)-A(2)*B(13)-A(3)*B(12)+A(4)*B(11)+A(5)*B(10)-A(6)*B(9)+A(7)*B(8)-A(8)*B(7)+A(9)*B(6)-A(10)*B(5)-A(11)*B(4)+A(12)*B(3)+A(13)*B(2)-A(14)*B(1)+A(15)*B(0)
END SUB

!EXTERNAL  SUB CMUL(A(),B(),C())
!OPTION BASE 0
!DIM T$(15,15)
!MAT C=ZER
!MAT READ T$
!FOR I=0 TO 15
!   FOR J=0 TO 15
!      IF A(I)<>0 AND B(J)<>0 THEN
!         IF T$(I,J)="-0" THEN
!            LET C(0)=C(0)-A(I)*B(J)
!         ELSE
!            LET D=VAL(T$(I,J))
!            IF D>=0 THEN
!               LET C(D)=C(D)+A(I)*B(J)
!            ELSE
!               LET C(-D)=C(-D)-A(I)*B(J)
!            END IF
!         END IF
!      END IF
!   NEXT J
!NEXT I
!DATA  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 '16元数乗積表
!DATA  1, -0,  3, -2,  5, -4, -7,  6,  9, -8,-11, 10,-13, 12, 15,-14
!DATA  2, -3, -0,  1,  6,  7, -4, -5, 10, 11, -8, -9,-14,-15, 12, 13
!DATA  3,  2, -1, -0,  7, -6,  5, -4, 11,-10,  9, -8,-15, 14,-13, 12
!DATA  4, -5, -6, -7, -0,  1,  2,  3, 12, 13, 14, 15, -8, -9,-10,-11
!DATA  5,  4, -7,  6, -1, -0, -3,  2, 13,-12, 15,-14,  9, -8, 11,-10
!DATA  6,  7,  4, -5, -2,  3, -0, -1, 14,-15,-12, 13, 10,-11, -8,  9
!DATA  7, -6,  5,  4, -3, -2,  1, -0, 15, 14,-13,-12, 11, 10, -9, -8
!DATA  8, -9,-10,-11,-12,-13,-14,-15, -0,  1,  2,  3,  4,  5,  6,  7
!DATA  9,  8,-11, 10,-13, 12, 15,-14, -1, -0, -3,  2, -5,  4,  7, -6
!DATA 10, 11,  8, -9,-14,-15, 12, 13, -2,  3, -0, -1, -6, -7,  4,  5
!DATA 11,-10,  9,  8,-15, 14,-13, 12, -3, -2,  1, -0, -7,  6, -5,  4
!DATA 12, 13, 14, 15,  8, -9,-10,-11, -4,  5,  6,  7, -0, -1, -2, -3
!DATA 13,-12, 15,-14,  9,  8, 11,-10, -5, -4,  7, -6,  1, -0,  3, -2
!DATA 14,-15,-12, 13, 10,-11,  8,  9, -6, -7, -4,  5,  2, -3, -0,  1
!DATA 15, 14,-13,-12, 11, 10, -9,  8, -7,  6, -5, -4,  3,  2, -1, -0
!END SUB
 

Re: 100までの素数

 投稿者:しばっち  投稿日:2009年 9月27日(日)13時55分0秒
  > No.579[元記事へ]

100までの自然数には約数が存在し、全て割り切れる。よって素数はない(?)。 チャン、チャン(笑)

(もしかすると、全ての自然数が割り切れるのかもしれない)

(注) 約数はまだ複数組存在すると思われる
2 :{1 + i,1 - i}
3 :{1 + i + j,1 - i - j}
5 :{2 + i,2 - i}
7 :{2 + i + j + k,2 - i - j - k}
11 :{3 + i + j,3 - i - j}
13 :{3 + 2i,3 - 2i}
17 :{4 + i,4 - i}
19 :{3 + 3i + j,3 - 3i - j}
23 :{3 + 3i + 2j + k,3 - 3i - 2j - k}
29 :{5 + 2i,5 - 2i}
31 :{5 + 2i + j + k,5 - 2i - j - k}
37 :{6 + i,6 - i}
41 :{5 + 4i,5 - 4i}
43 :{5 + 3i + 3j,5 - 3i - 3j}
47 :{6 + 3i + j + k,6 - 3i - j - k}
53 :{7 + 2i,7 - 2i}
59 :{7 + 3i + j,7 - 3i - j}
61 :{6 + 5i,6 - 5i}
67 :{7 + 3i + 3j,7 - 3i - 3j}
71 :{6 + 5i + 3j + k,6 - 5i - 3j - k}
73 :{8 + 3i,8 - 3i}
79 :{7 + 5i + 2j + k,7 - 5i - 2j - k}
83 :{9 + i + j,9 - i - j}
89 :{8 + 5i,8 - 5i}
97 :{9 + 4i,9 - 4i}
 

Re: 100までの素数

 投稿者:kikiriri  投稿日:2009年 9月27日(日)17時26分54秒
  > No.579[元記事へ]

しばっちさんへのお返事です。

しばっちさんへ、
kikiririより、
素数を求めるプログラムありがとうございます。
プログラムは読めないんですが。
100までの素数出ました。
意外と時間がかかりました

正誤の確認もしていないのですが(以下URLより確認しました)

”1”が出てこないですね”1”って素数ではないのですか?

(「”1”は素数ではない」中3の参考書より)

偶数について何か思うところはありますか?

 

Re: 100までの素数

 投稿者:しばっち  投稿日:2009年 9月27日(日)19時53分59秒
  > No.582[元記事へ]

kikiririさんへのお返事です。

実際に求めているのは(4元数での)約数です。(プログラムでは8元数で探索)
約数が存在しないとき、その数が素数だといえると思います。
100までの自然数には、全て約数(4元数)があるため、素数はないとしています。
題名を「100までの約数」とすれば良かったのかもしれません。
素数は「1とその数自身でしか割れない数」としているので1は含まないとしています。(ちなみに1=-i×iと分解できる)
同様に虚数単位の±i,±j,±k...も外しています。(i^2=-1,j^2=-1,k^2=-1...)
偶数については思いつくことはありません。
 

Re: 100までの素数

 投稿者:kikiriri  投稿日:2009年 9月27日(日)21時03分39秒
  > No.583[元記事へ]

しばっちさんへのお返事です。

しばっちさんへ

 kikiririより

早速のご返信ありがとうございました。

難しいことはよく分かりませんが、

i^2=-1 i=√(-1) はかろうじて思い出せました。

多次元というと、行列表記(線形代数「にがて」を思い出します.)

印刷したプログラムを見た感じでは、何ともいえませんが(解説なしのプログラムが読めない。)

多次元行列計算はプログラムではこう書くのですね?(あってますか?(的外れ?))

しかも素数を探索しながら。

こういうのアルゴリズムを考慮したプログラムというんですね?

もし宜しければ工夫した点なんて教えていただけないですか?(すみません)

僕にはプログラムは読めませんが(分かりやすく説明するには手間というかセンスが必要になったりして僕にそれがあるかどうかはなぞです。)


以上ありがとうございました
 

戻る