素数の末尾はかならず1、3、7、9なので、確率は1/4。

 投稿者:たろさ  投稿日:2016年12月20日(火)11時09分28秒
  素数の出方はランダムではなかった。1億個調べて浮かんだ奇妙な数

閲覧して興味を持ちました。素数の末尾をcount

BASIC Accelerator Version 0.9.8.0
----------------------------------------
1億まで
----------------------------------------
!Sieve of Sundaram
DECLARE EXTERNAL FUNCTION cut
OPTION ARITHMETIC NATIVE       !2進モード
LET k6=5761455
DIM Ba(k6)
DIM Pa(9)
LET t0=TIME
LET k9=1E8/2
DIM A(k9)
FOR i=1 TO SQR(k9)
   FOR j=i TO INT(k9/3)
      LET S=i+j+2*i*j
      IF s>k9 THEN GOTO 10
      LET A(S)=1
   NEXT j
10 NEXT i
   LET Ba(1)=2
   LET C=1
   FOR n=1 TO k9
      IF A(n)=0 THEN
         LET C=C+1
         LET Ba(c)=n*2+1
      END IF
   NEXT n

   FOR n=1 TO k6
      LET m4=Ba(n)
      LET p4=cut(m4)
      LET PA(p4)=PA(p4)+1
   NEXT n

   FOR n=1 TO 9
      IF PA(n)<>0 THEN
         PRINT n;":";PA(n)
         LET z=z+PA(n)
      END IF
   NEXT n
   PRINT z

   LET TM=TIME-t0
   PRINT USING"####." & REPEAT$("#",2):TM;
   PRINT "秒"

END

EXTERNAL FUNCTION  cut(m)
   OPTION ARITHMETIC NATIVE

   LET a$=""&STR$(m)
   LET L=LEN(a$)
   LET L1= VAL(MID$(a$,L,L))
   LET cut=L1
END FUNCTION

----------------------------------------
計算結果
1 : 1440298
2 : 1
3 : 1440474
5 : 1
7 : 1440495
9 : 1440186
  5761455

  13.65秒




----------------------------------------
1億から2億まで
----------------------------------------
!#3978
!Re: Sieve of Sundaram サンダラムの篩(ふるい)  投稿者:nagram 様
!Sieve of Sundaram PBA
DECLARE EXTERNAL FUNCTION cut
OPTION ARITHMETIC NATIVE       !2進モード
LET k6=5317482 !5761455
DIM Ba(k6)
DIM Pa(9)
LET t0=TIME
LET M=1E8/2   !素数 最小値
LET W=M-1
LET N=2E8/2   !素数 最大値
LET C=5761455    !1E8,(5761455th prime)
DIM A(1 TO N-W)
MAT A=ZER
LET  S=3
LET  D=4
LET k=INT(SQR(N))*3
DO
   LET B=D+S*INT((M-D)/S)  !ここが改良のポイント
   DO UNTIL B>=M
      LET B=B+S
   LOOP
   FOR I=B TO N STEP S
      LET A(I-W)=1
   NEXT I
   LET  S=S+2
   LET  D=D+3
LOOP UNTIL D>k

FOR n=1 TO N-W
   IF A(n)=0 THEN
      LET n1=n+W
      LET C=C+1
      LET CC=CC+1
      LET Sundaram=n1*2+1
      !PRINT c;":";Sundaram
      LET Ba(cc)=Sundaram
   END IF
NEXT n


FOR n=1 TO k6
   LET m4=Ba(n)
   LET p4=cut(m4)
   LET PA(p4)=PA(p4)+1
NEXT n

FOR n=1 TO 9
   IF PA(n)<>0 THEN
      PRINT n;":";PA(n)
      LET z=z+PA(n)
   END IF
NEXT n
PRINT z

LET TM=TIME-t0
PRINT USING"####." & REPEAT$("#",2):TM;
PRINT "秒"

END

EXTERNAL FUNCTION  cut(m)
OPTION ARITHMETIC NATIVE

LET a$=""&STR$(m)
LET L=LEN(a$)
LET L1= VAL(MID$(a$,L,L))
LET cut=L1
END FUNCTION


----------------------------------------
計算結果
1 : 1329469
3 : 1329374
7 : 1329577
9 : 1329062
  5317482
  13.74秒

まだ、まだです。最初は、沢山時間がかかりました。

----------------------------------------
乱数 計算の度に数値が変化します。
----------------------------------------
DIM A(4)
RANDOMIZE
FOR t=1 TO 5761455-2
   LET n=1+IP(4*RND)
   LET A(n)=A(n)+1
   ! PRINT n
NEXT t

PRINT a(1)
PRINT a(2)
PRINT a(3)
PRINT a(4)

END

(素数の末尾はかならず1、3、7、9なので、確率は4つにひとつ)。


http://blogs.yahoo.co.jp/donald_stinger

 

戻る