素数多発関数の考察

 投稿者:GAI  投稿日:2012年12月31日(月)18時19分2秒
  f(n)=2*n^2-199
の関数で素数を発生させるnの値の表(*は合成数の結果となるもの。)
これより効率よい関数を探せないか?
(n=1~1000で調査したもの)


** 20 30 40 50 60 70 80 90
11 21 31 41 51 61 71 81 91
12 22 ** 42 52 62 72 82 92
13 23 33 43 53 ** 73 ** 93
14 24 34 44 ** 64 74 84 **
15 25 35 45 55 ** ** 85 95
16 26 36 ** 56 66 76 86 96
17 27 37 47 57 67 ** 87 **
18 ** 38 48 58 68 78 88 98
19 29 39 49 59 69 ** 89 99


100 110 *** 130 *** *** 160 170 180 ***
*** 111 *** 131 141 151 *** *** 181 191
*** 112 122 132 142 *** 162 *** *** 192
103 113 123 *** 143 153 *** 173 *** ***
104 114 124 *** *** *** 164 174 *** ***
105 115 125 135 145 *** 165 175 *** ***
106 116 *** 136 146 156 *** *** 186 ***
107 117 127 137 147 *** 167 177 187 197
*** *** 128 138 148 *** 168 *** 188 ***
109 119 129 *** 149 159 169 *** *** ***


200 210 220 230 240 *** *** 270 280 ***
201 211 *** *** 241 251 261 271 *** ***
202 212 222 232 242 *** 262 272 282 ***
203 *** 223 233 243 253 263 273 283 ***
*** 214 224 234 244 254 *** 274 *** 294
*** 215 225 235 245 *** *** 275 285 295
206 216 *** *** 246 256 *** *** 286 ***
*** 217 227 237 *** 257 *** 277 *** ***
*** 218 228 238 *** 258 *** 278 *** 298
*** 219 229 239 249 259 *** *** 289 299


300 *** 320 *** 340 *** 360 370 *** ***
301 311 321 331 341 351 *** 371 *** 391
302 *** 322 *** *** 352 *** *** 382 392
*** 313 323 *** 343 *** *** *** 383 ***
304 314 *** 334 345 354 364 374 *** 394
*** 315 325 335 *** *** *** *** 385 ***
306 *** 326 *** 346 356 366 *** 386 ***
307 317 327 *** *** 357 367 377 *** ***
308 318 *** *** 348 358 *** 378 388 ***
309 319 *** *** 349 *** *** *** 389 399


*** *** 420 *** *** *** 460 *** *** ***
401 *** *** *** *** *** 461 *** *** 491
402 412 422 432 *** *** *** *** *** 492
403 413 423 *** 443 *** 463 473 *** 493
*** 414 424 *** 444 454 464 474 *** 494
405 415 *** *** 445 456 465 475 485 495
406 *** 426 436 446 *** 466 476 486 496
407 417 427 437 *** *** *** 477 *** ***
408 *** 428 438 448 458 468 478 488 ***
409 *** 429 *** 449 459 469 479 *** ***


500 *** *** *** *** 550 *** *** *** ***
501 *** 521 531 541 551 561 *** *** ***
*** *** *** 532 *** 552 *** 572 *** ***
503 513 523 533 *** 553 563 573 *** ***
*** *** 524 534 544 554 *** 574 584 ***
*** 515 *** 535 545 *** *** *** *** ***
506 516 526 536 *** *** *** *** 586 ***
507 *** *** 537 547 *** 567 577 587 ***
508 518 528 538 *** 558 568 *** 588 ***
*** 519 529 539 549 559 *** *** *** ***


600 *** *** 630 640 *** 660 670 680 690
*** *** *** *** *** *** 661 671 681 691
602 612 622 632 *** 652 *** *** *** 692
603 *** 623 633 643 *** 663 673 683 693
*** 614 624 *** 644 *** *** 674 684 ***
605 615 625 *** 645 655 665 *** 685 695
606 616 626 636 646 *** 666 676 686 ***
607 617 627 *** *** *** 667 *** *** 697
*** 618 628 *** 648 658 668 678 688 ***
609 *** *** 639 649 *** 669 *** 689 ***


*** 710 *** 730 *** *** 760 770 780 790
701 711 *** *** *** 751 *** *** *** ***
703 *** 722 *** *** 752 *** 772 *** 792
*** *** *** 733 743 753 *** *** *** 793
*** *** *** *** *** 754 764 774 784 794
705 715 725 735 745 755 765 *** *** ***
*** 716 726 736 746 *** *** 776 *** ***
707 *** *** 737 *** 757 *** 777 *** ***
*** *** 728 *** 748 *** *** 778 *** 798
*** *** 729 739 *** 759 *** 779 *** 799


800 810 820 830 *** 850 *** 870 *** 890
*** 811 *** *** *** 851 861 *** 881 891
802 812 822 832 *** 852 862 *** *** ***
*** *** *** 833 843 853 *** 873 *** ***
804 *** 824 834 *** 854 864 874 884 894
*** *** 825 835 845 855 865 875 885 ***
*** 816 *** *** *** 856 866 *** 886 896
*** *** *** 837 *** *** *** 877 887 ***
*** 818 *** 838 848 *** 868 *** 888 898
*** 819 *** *** *** 859 *** *** *** ***


*** *** *** *** 940 950 *** 970 980 ***
901 911 921 *** 941 *** 961 *** 981 ***
*** 912 922 932 942 952 962 972 982 ***
903 913 *** 933 943 *** *** *** 983 ***
904 *** 924 *** *** 954 *** *** *** ***
905 *** 925 *** 945 *** 965 *** *** ***
906 *** *** 936 *** 956 966 *** *** 996
907 917 927 937 947 *** *** *** 987 997
*** *** *** 938 948 958 968 *** 988 ***
909 919 *** 939 949 *** 969 *** *** ***

 

Re: 素数多発関数の考察

 投稿者:山中和義  投稿日:2013年 1月 1日(火)11時50分8秒
  > No.2868[元記事へ]

GAIさんへのお返事です。

> f(n)=2*n^2-199
> の関数で素数を発生させるnの値の表(*は合成数の結果となるもの。)
> これより効率よい関数を探せないか?

●1次
素数は2と奇素数より、2n+3、n=0,1,2,3,…  ← 式1
素数判定法のひとつ試し割り法(提示した関数PrimeQ(n)を参照)より、6n+{1,5} ← 式2
発展させて、2,3,5と30n+{1,7,11,13,17,19,23,29}とすることもできる。

ひとつの式のみ採用すれば、式1が優位だが、式2は2つ採用すれば精度は上がる。

●2次
2n^2-199では、11項が負の数と1になるので、nをn+11として、2n^2+44n+43
オイラーが発見したn^2+n+41
n^2+999n+61



!素数を生成する変数nの整数係数多項式

LET M=10000 !上限
LET C=0 !素数になる回数
FOR N=0 TO M
   !!LET P=2*N+3
   LET P=6*N+1
   !!LET P=6*N-1

   !!LET P=2*N^2+44*N+43 !2n^2-199より
   !!LET P=N^2+N+41 !オイラーが発見
   !!LET P=N^2+999*N+61

   LET W=PrimeQ(P)
   LET C=C+W
   !PRINT N; P; W !debg
NEXT N
PRINT C/(M+1)*100;"%"
END


!試行割算法

EXTERNAL FUNCTION PrimeQ(n) !素数判定 1:素数、0:素数でない
LET PrimeQ=0
IF n<2 OR n<>INT(n) THEN EXIT FUNCTION !引数を確認する
!2以上の自然数なら
IF MOD(n,2)=0 THEN !2の倍数
   IF n=2 THEN LET PrimeQ=1 !2は素数
ELSEIF MOD(n,3)=0 THEN !3の倍数
   IF n=3 THEN LET PrimeQ=1 !3は素数
ELSE
   LET k=5
   DO WHILE k*k<=n !√nまで検証する
      IF MOD(n,k)=0 THEN !5,11,17,23,29,…
         EXIT FUNCTION
      ELSEIF MOD(n,k+2)=0 THEN !7,13,19,25,31,…
         EXIT FUNCTION
      END IF !+1,+3,+5は2の倍数(偶数)、+1,+4は3の倍数、+5は5の倍数
      LET k=k+6
   LOOP
   LET PrimeQ=1 !最後まで割り切れなければ、素数である
END IF
END FUNCTION

 

Re: 素数多発関数の考察

 投稿者:山中和義  投稿日:2013年 1月 2日(水)12時57分33秒
  > No.2920[元記事へ]

ウラムの螺旋

17 16 15 14 13
18  5  4  3 12
19  6  1  2 11
20  7  8  9 10 ↑
21 22 23 24 25 26

右斜めの数 1,3,7,13,21,…は、n^2+n+1、n=0,1,2,3,…
中央1を41に置き換えて、n^2+n+41


!ウラムの螺旋

LET M=25 !45

!!SET TEXT HEIGHT 0.0075
SET TEXT JUSTIFY "CENTER","HALF"
SET bitmap SIZE 600,600
SET WINDOW -M/2,M/2,-M/2,M/2

LET D=41 !中央の値
LET X=0
LET Y=0
SET TEXT COLOR 1+3*PrimeQ(D)
PLOT TEXT, AT X,Y: STR$(D)

LET DX=1 !移動方向
LET DY=1
FOR S=1 TO M !ステップ数
   FOR L=1 TO S !x軸方向
      LET D=D+1
      LET X=X+DX
      SET TEXT COLOR 1+3*PrimeQ(D)
      PLOT TEXT, AT X,Y: STR$(D)
   NEXT L
   LET DX=-DX

   FOR L=1 TO S !y軸方向
      LET D=D+1
      LET Y=Y+DY
      SET TEXT COLOR 1+3*PrimeQ(D)
      PLOT TEXT, AT X,Y: STR$(D)
   NEXT L
   LET DY=-DY
NEXT S

END


!試行割算法

EXTERNAL FUNCTION PrimeQ(n) !素数判定 1:素数、0:素数でない
LET PrimeQ=0
IF n<2 OR n<>INT(n) THEN EXIT FUNCTION !引数を確認する
!2以上の自然数なら
IF MOD(n,2)=0 THEN !2の倍数
   IF n=2 THEN LET PrimeQ=1 !2は素数
ELSEIF MOD(n,3)=0 THEN !3の倍数
   IF n=3 THEN LET PrimeQ=1 !3は素数
ELSE
   LET k=5
   DO WHILE k*k<=n !√nまで検証する
      IF MOD(n,k)=0 THEN !5,11,17,23,29,…
         EXIT FUNCTION
      ELSEIF MOD(n,k+2)=0 THEN !7,13,19,25,31,…
         EXIT FUNCTION
      END IF !+1,+3,+5は2の倍数(偶数)、+1,+4は3の倍数、+5は5の倍数
      LET k=k+6
   LOOP
   LET PrimeQ=1 !最後まで割り切れなければ、素数である
END IF
END FUNCTION

 

戻る