|
本帖最后由 愚工688 于 2018-8-28 14:43 编辑
其实这些小偶数的素对数量对于计算机来说,小菜一碟,运行起来一秒钟就够了。
因此需要统计一定数量的偶数,最好的方法是自己掌握一种计算机筛选偶数的素对的方法。
我不知道你为什么没有一个筛选素对的程序?
我在帖子中曾经发过类似的筛选素对程序,今天再发一个Qbasic 程序吧。
OPEN "jishuan.txt" FOR OUTPUT AS #1
OPEN "jishuan2.txt" FOR OUTPUT AS #2
DEFDBL A-S
po1: INPUT "T&u are even numbers. If t<6 then end. t,u="; t, u
FOR m = t TO u STEP 2
REM 4<M & M is
IF m < 6 THEN GOTO po2
IF m / 2 > INT(m / 2) THEN GOTO po1
PRINT #1, " ["; m; "= ] ";
a = m / 2: C = a - 3: d = (a - 2) / 2
PRINT #2, "A="; a; ","; "x= :";
m$ = STR$(m): a$ = STR$(a): d$ = "[(" + m$ + "/2- 2)/2]": r$ = ""
s1 = 0: s2 = 0: R1 = 2: K = 1
IF INT(a / 2) = a / 2 THEN B = 1: ELSE B = 0
FOR x = B TO C STEP 2
GOSUB pp2
NEXT x
GOSUB pp3
s = s1 + s2: E = (d - s) / s: E1 = (d - s1) / s1
d = INT(1000 * d + .5) / 1000: E = INT(1000 * E + .5) / 1000: E1 = INT(1000 * E1 + .5) / 1000:
K = INT(1000 * K + .5) / 1000
PRINT TAB(0); "M="; m; TAB(10); "S(m)="; s; TAB(21); "S1(m)="; s1; TAB(32); "Sp(m)="; d; TAB(47); "E(m)="; E; TAB(58); "K(m)="; K; TAB(70); "r="; R1
PRINT "* Sp("; m$; ")="; d$ + r$; "="; d
PRINT #1, TAB(1); "M="; m; TAB(12); "S(m)="; s; TAB(24); "S1(m)="; s1; TAB(36); "Sp(m)≈"; d; TAB(51); "δ(m)≈"; E; TAB(64); "K(m)="; K; TAB(78); "e1="; E1
PRINT #1, " * Sp("; m$; ")="; d$ + r$; "≈"; d
PRINT #1, ""
PRINT #2, ""
PRINT #2, TAB(1); "M="; m; TAB(12); "S(m)="; s; TAB(24); "S1(m)="; s1; TAB(36); "Sp(m)≈"; d; TAB(51); "δ(m)≈"; E; TAB(64); "K(m)="; K; TAB(78); "r="; R1
PRINT #2, " * Sp("; m$; ")="; d$ + r$; "≈"; d
PRINT #2, ""
PRINT
NEXT m
po2: END
pp2: READ r
IF SQR(m - 3) < r THEN
GOTO po3
ELSEIF INT((a + x) / r) = (a + x) / r THEN GOTO po4
ELSEIF INT((a - x) / r) = (a - x) / r AND a - x > r THEN GOTO po4
ELSE GOTO pp2
END IF
po3: IF a - x >= r THEN s1 = s1 + 1: ELSE s2 = s2 + 1
IF a - x >= r THEN PRINT #2, x; ","; ELSE PRINT #2, "("; x; "),";
s = s1 + s2
PRINT #1, a - x; "+"; a + x;
PRINT a - x; "+"; a + x;
po4: RESTORE
RETURN
pp3: READ r
IF SQR(m - 3) < r THEN
GOTO po6
END IF
R1 = r
r0$ = STR$(r): R1$ = STR$(r - 1): R2$ = STR$(r - 2)
IF INT(a / r) = a / r THEN
d = d * (r - 1) / r
ELSE
d = d * (r - 2) / r
END IF
IF INT(a / r) = a / r THEN
r$ = r$ + "*(" + R1$ + "/" + r0$ + ")"
ELSE
r$ = r$ + "*(" + R2$ + "/" + r0$ + ")"
END IF
IF INT(a / r) = a / r THEN K = K * (r - 1) / (r - 2)
GOTO pp3
po6: RESTORE
RETURN
DATA 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43 , 47 , 53 , 59 , 61 , 67 , 71 , 73 , 79 , 83 , 89 , 97 , 101 , 103 , 107 , 109 , 113 , 127 , 131 , 137 , 139 , 149 , 151 , 157 , 163 , 167 , 173 , 179 , 181 , 191 , 193 , 197 , 199 , 211 , 223 , 227 , 229 , 233 , 239 , 241 , 251 , 257 , 263 , 269 , 271 , 277 , 281 , 283 , 293 , 307 , 311 , 313 , 317 , 331 , 337 , 347 , 349 , 353 , 359 , 367 , 373 , 379 , 383 , 389 , 397 , 401 , 409 , 419 , 421 , 431 , 433 , 439 , 443 , 449 , 457 , 461 , 463 , 467 , 479 , 487 , 491 , 499
DATA 503 , 509 , 521 , 523 , 541 , 547 , 557 , 563 , 569 , 571 , 577 , 587 , 593 , 599 , 601 , 607 , 613 , 617 , 619 , 631 , 641 , 643 , 647 , 653 , 659 , 661 , 673 , 677 , 683 , 691 , 701 , 709 , 719 , 727 , 733 , 739 , 743 , 751 , 757 , 761 , 769 , 773 , 787 , 797 , 809 , 811 , 821 , 823 , 827 , 829 , 839 , 853 , 857 , 859 , 863 , 877 , 881 , 883 , 887 , 907 , 911 , 919 , 929 , 937 , 941 , 947 , 953 , 967 , 971 , 977 , 983 , 991 , 997
DATA 1009 , 1013 , 1019 , 1021 , 1031 , 1033 , 1039 , 1049 , 1051 , 1061 , 1063 , 1069 , 1087 , 1091 , 1093 , 1097 , 1103 , 1109 , 1117 , 1123 , 1129 , 1151 , 1153 , 1163 , 1171 , 1181 , 1187 , 1193 , 1201 , 1213 , 1217 , 1223 , 1229 , 1231 , 1237 , 1249 , 1259 , 1277 , 1279 , 1283 , 1289 , 1291 , 1297 , 1301 , 1303 , 1307 , 1319 , 1321 , 1327 , 1361 , 1367 , 1373 , 1381 , 1399 , 1409 , 1423 , 1427 , 1429 , 1433 , 1439 , 1447 , 1451 , 1453 , 1459 , 1471 , 1481 , 1483 , 1487 , 1489 , 1493 , 1499
DATA 1511 , 1523 , 1531 , 1543 , 1549 , 1553 , 1559 , 1567 , 1571 , 1579 , 1583 , 1597 , 1601 , 1607 , 1609 , 1613 , 1619 , 1621 , 1627 , 1637 , 1657 , 1663 , 1667 , 1669 , 1693 , 1697 , 1699 , 1709 , 1721 , 1723 , 1733 , 1741 , 1747 , 1753 , 1759 , 1777 , 1783 , 1787 , 1789 , 1801 , 1811 , 1823 , 1831 , 1847 , 1861 , 1867 , 1871 , 1873 , 1877 , 1879 , 1889 , 1901 , 1907 , 1913 , 1931 , 1933 , 1949 , 1951 , 1973 , 1979 , 1987 , 1993 , 1997 , 1999
这里的素数数据库能够满足计算400万以内的偶数。
计算实例:
[ 50 = ] 19 + 31 13 + 37 7 + 43 3 + 47
M= 50 S(m)= 4 S1(m)= 3 Sp(m)≈ 3.067 δ(m)≈-.233 K(m)= 1.333 e1= .022
* Sp( 50)=[( 50/2- 2)/2]*( 1/ 3)*( 4/ 5)≈ 3.067
[ 52 = ] 23 + 29 11 + 41 5 + 47
M= 52 S(m)= 3 S1(m)= 2 Sp(m)≈ 1.714 δ(m)≈-.429 K(m)= 1 e1=-.143
* Sp( 52)=[( 52/2- 2)/2]*( 1/ 3)*( 3/ 5)*( 5/ 7)≈ 1.714
[ 54 = ] 23 + 31 17 + 37 13 + 41 11 + 43 7 + 47
M= 54 S(m)= 5 S1(m)= 4 Sp(m)≈ 3.571 δ(m)≈-.286 K(m)= 2 e1=-.107
* Sp( 54)=[( 54/2- 2)/2]*( 2/ 3)*( 3/ 5)*( 5/ 7)≈ 3.571
[ 56 = ] 19 + 37 13 + 43 3 + 53
M= 56 S(m)= 3 S1(m)= 2 Sp(m)≈ 2.229 δ(m)≈-.257 K(m)= 1.2 e1= .114
* Sp( 56)=[( 56/2- 2)/2]*( 1/ 3)*( 3/ 5)*( 6/ 7)≈ 2.229
[ 58 = ] 29 + 29 17 + 41 11 + 47 5 + 53
M= 58 S(m)= 4 S1(m)= 3 Sp(m)≈ 1.929 δ(m)≈-.518 K(m)= 1 e1=-.357
* Sp( 58)=[( 58/2- 2)/2]*( 1/ 3)*( 3/ 5)*( 5/ 7)≈ 1.929
[ 60 = ] 29 + 31 23 + 37 19 + 41 17 + 43 13 + 47 7 + 53
M= 60 S(m)= 6 S1(m)= 5 Sp(m)≈ 5.333 δ(m)≈-.111 K(m)= 2.667 e1= .067
* Sp( 60)=[( 60/2- 2)/2]*( 2/ 3)*( 4/ 5)*( 5/ 7)≈ 5.333
[ 62 = ] 31 + 31 19 + 43 3 + 59
M= 62 S(m)= 3 S1(m)= 2 Sp(m)≈ 2.071 δ(m)≈-.31 K(m)= 1 e1= .036
* Sp( 62)=[( 62/2- 2)/2]*( 1/ 3)*( 3/ 5)*( 5/ 7)≈ 2.071
[ 64 = ] 23 + 41 17 + 47 11 + 53 5 + 59 3 + 61
M= 64 S(m)= 5 S1(m)= 3 Sp(m)≈ 2.143 δ(m)≈-.571 K(m)= 1 e1=-.286
* Sp( 64)=[( 64/2- 2)/2]*( 1/ 3)*( 3/ 5)*( 5/ 7)≈ 2.143
[ 66 = ] 29 + 37 23 + 43 19 + 47 13 + 53 7 + 59 5 + 61
M= 66 S(m)= 6 S1(m)= 4 Sp(m)≈ 4.429 δ(m)≈-.262 K(m)= 2 e1= .107
* Sp( 66)=[( 66/2- 2)/2]*( 2/ 3)*( 3/ 5)*( 5/ 7)≈ 4.429
[ 68 = ] 31 + 37 7 + 61
M= 68 S(m)= 2 S1(m)= 1 Sp(m)≈ 2.286 δ(m)≈ .143 K(m)= 1 e1= 1.286
* Sp( 68)=[( 68/2- 2)/2]*( 1/ 3)*( 3/ 5)*( 5/ 7)≈ 2.286
至于你要求偶数的间隔,修改此条语句中的STEP 2 即可:改成 (STEP 30 )
FOR m = t TO u STEP 2 |
|