素數螺旋是一個最簡單的方法構想,來展示出素數的一定明顯規律的二次多項式去創建大量的素數數字。
項目介紹,代碼,
項目介紹
該項目是由數學家斯塔尼斯拉夫·烏拉姆在1963年發現的,之後他在一個科學會議上。亂寫了一張“又長又令人厭煩的”報告。不久以後,在一個較前的電腦圖像申請函中,烏嵐與他的協作者邁倫·斯特尼和馬克·威爾在洛斯阿拉莫斯國家實驗室使用了MANIAC II代碼生產了該數字的螺旋圖片至65000這個數字。1964年3月,馬丁·加德納 在他出版的書籍——《趣味數學》上寫了一篇關於烏嵐螺旋的內容。而當這個數列出現時,已經被入選了在《科學美國人》的雜誌首頁上。
左圖為偽素數與素數兩色圖
圖形是autocad vba程式製作
代碼
Sub 素數螺旋()
Dim t As Variant
Dim n As Variant
Dim co As Variant
Dim S As Variant
Dim k As Variant
Dim pointObj As AcadPoint
Dim location(0 To 2) As Double
Dim p(1 To 100000) As Double
Dim i As Variant
Dim J As Variant
Dim x As Variant
x = 3.1415926
S = 0
k = 8.8624554903079E-06
For i = 1 To 100000 Step 1
t = 3 * i+ 3*(sin(0.5*x*i))^2 + (-1) ^ i: S = S
a = i
location(0) = 30 * a * (Cos(a / k)): location(1) = 30 * a * (Sin(a / k)): location(2) = 0#
Set pointObj = ThisDrawing.ModelSpace.AddPoint(location)
If qp(t) = 1 Then
pointObj.color = acRed
End If
If qp(t) = 0 Then
pointObj.color = acBlue: S = S + 1
End If
Next i
MsgBox "合計" & i - S - 1 & "個素數!"
End Sub
Function p(m As Variant, n As Variant) As Variant
If n >= m Then
p = 1
End If
If m / n = Int(m / n) And n < m Then
p = 0
Else
p = 1
End If
End Function
Function qp(m As Variant) As Variant
Dim S As Long, s1 As Long, s2 As Long, s3 As Long, s4 As Long, s5 As Long, s6 As Long
Dim s7 As Long, s8 As Long, s9 As Long, s10 As Long, s11 As Long, s12 As Long, s13 As Long
Dim s14 As Long, s15 As Long, s16 As Long, s17 As Long, s18 As Long, s19 As Long
Dim s20 As Long, s21 As Long, s22 As Long, s23 As Long, s24 As Long, s25 As Long
Dim s26 As Long, s27 As Long, s28 As Long, s29 As Long, s30 As Long, s31 As Long
S = p(m, 5) * p(m, 7) * p(m, 11) * p(m, 13) * p(m, 17) * p(m, 19) * p(m, 23) * p(m, 29) * p(m, 31) * p(m, 37) * p(m, 41) * p(m, 43) * p(m, 47) * p(m, 53) * p(m, 59) * p(m, 61) * p(m, 67) * p(m, 71) * p(m, 73) * p(m, 79) * p(m, 83) * p(m, 89) * p(m, 97)
s1 = p(m, 101) * p(m, 103) * p(m, 107) * p(m, 109) * p(m, 113) * p(m, 127) * p(m, 131) * p(m, 137) * p(m, 139) * p(m, 149) * p(m, 151) * p(m, 157) * p(m, 163) * p(m, 167) * p(m, 173) * p(m, 179) * p(m, 181) * p(m, 191)
s2 = p(m, 193) * p(m, 197) * p(m, 199) * p(m, 211) * p(m, 223) * p(m, 227) * p(m, 229) * p(m, 233) * p(m, 239) * p(m, 241) * p(m, 251) * p(m, 257) * p(m, 263) * p(m, 269) * p(m, 271) * p(m, 277) * p(m, 281) * p(m, 283)
s3 = p(m, 293) * p(m, 307) * p(m, 311) * p(m, 313) * p(m, 317) * p(m, 331) * p(m, 337) * p(m, 347) * p(m, 349) * p(m, 353) * p(m, 359) * p(m, 367) * p(m, 373) * p(m, 379) * p(m, 383) * p(m, 389) * p(m, 397) * p(m, 401)
s4 = p(m, 409) * p(m, 419) * p(m, 421) * p(m, 431) * p(m, 433) * p(m, 439) * p(m, 443) * p(m, 449) * p(m, 457) * p(m, 461) * p(m, 463) * p(m, 467) * p(m, 479) * p(m, 487) * p(m, 491) * p(m, 499) * p(m, 503) * p(m, 509)
s5 = p(m, 521) * p(m, 523) * p(m, 541) * p(m, 547) * p(m, 557) * p(m, 563) * p(m, 569) * p(m, 571) * p(m, 577) * p(m, 587) * p(m, 593) * p(m, 599) * p(m, 601) * p(m, 607) * p(m, 613) * p(m, 617) * p(m, 619) * p(m, 631)
s6 = p(m, 641) * p(m, 643) * p(m, 647) * p(m, 653) * p(m, 659) * p(m, 661) * p(m, 673) * p(m, 677) * p(m, 683) * p(m, 691) * p(m, 701) * p(m, 709) * p(m, 719) * p(m, 727) * p(m, 733) * p(m, 739) * p(m, 743) * p(m, 751)
s7 = p(m, 757) * p(m, 761) * p(m, 769) * p(m, 773) * p(m, 787) * p(m, 797) * p(m, 809) * p(m, 811) * p(m, 821) * p(m, 823) * p(m, 827) * p(m, 829) * p(m, 839) * p(m, 853) * p(m, 857) * p(m, 881) * p(m, 883) * p(m, 857)
s8 = p(m, 859) * p(m, 863) * p(m, 877) * p(m, 907) * p(m, 911) * p(m, 919) * p(m, 929) * p(m, 937) * p(m, 941) * p(m, 947) * p(m, 953) * p(m, 967) * p(m, 971) * p(m, 977) * p(m, 983) * p(m, 991) * p(m, 997) * p(m, 1009)
s9 = p(m, 1013) * p(m, 1019) * p(m, 1021) * p(m, 1031) * p(m, 1033) * p(m, 1039) * p(m, 1049) * p(m, 1051) * p(m, 1061) * p(m, 1063) * p(m, 1069) * p(m, 1087) * p(m, 1091) * p(m, 1093) * p(m, 1097) * p(m, 1103) * p(m, 1109)
s10 = p(m, 1303) * p(m, 1307) * p(m, 1217) * p(m, 1223) * p(m, 1117) * p(m, 1123) * p(m, 1129) * p(m, 1151) * p(m, 1153) * p(m, 1163) * p(m, 1171) * p(m, 1181) * p(m, 1187) * p(m, 1193) * p(m, 1201) * p(m, 1213) * p(m, 1229)
s11 = p(m, 1231) * p(m, 1237) * p(m, 1249) * p(m, 1259) * p(m, 1277) * p(m, 1279) * p(m, 1283) * p(m, 1289) * p(m, 1291) * p(m, 1297) * p(m, 1301) * p(m, 1319) * p(m, 1321) * p(m, 1327) * p(m, 1361) * p(m, 1367) * p(m, 1373)
s12 = p(m, 1381) * p(m, 1399) * p(m, 1409) * p(m, 1423) * p(m, 1427) * p(m, 1429) * p(m, 1433) * p(m, 1439) * p(m, 1447) * p(m, 1451) * p(m, 1453) * p(m, 1459) * p(m, 1471) * p(m, 1481) * p(m, 1483) * p(m, 1487) * p(m, 1489)
s13 = p(m, 1493) * p(m, 1499) * p(m, 1511) * p(m, 1523) * p(m, 1531) * p(m, 1543) * p(m, 1549) * p(m, 1553) * p(m, 1559) * p(m, 1567) * p(m, 1571) * p(m, 1579) * p(m, 1583) * p(m, 1597) * p(m, 1601) * p(m, 1607) * p(m, 1609)
s14 = p(m, 1613) * p(m, 1619) * p(m, 1621) * p(m, 1627) * p(m, 1637) * p(m, 1657) * p(m, 1663) * p(m, 1667) * p(m, 1669) * p(m, 1693) * p(m, 1697) * p(m, 1699) * p(m, 1709) * p(m, 1721) * p(m, 1723) * p(m, 1733) * p(m, 1741)
s15 = p(m, 1747) * p(m, 1753) * p(m, 1759) * p(m, 1777) * p(m, 1783) * p(m, 1787) * p(m, 1789) * p(m, 1801) * p(m, 1811) * p(m, 1823) * p(m, 1831) * p(m, 1847) * p(m, 1861) * p(m, 1867) * p(m, 1871) * p(m, 1873) * p(m, 1877)
s16 = p(m, 1879) * p(m, 1889) * p(m, 1901) * p(m, 1907) * p(m, 1913) * p(m, 1931) * p(m, 1933) * p(m, 1949) * p(m, 1951) * p(m, 1973) * p(m, 1979) * p(m, 1987) * p(m, 1993) * p(m, 1997) * p(m, 1999) * p(m, 2003) * p(m, 2011)
s17 = p(m, 2017) * p(m, 2027) * p(m, 2029) * p(m, 2039) * p(m, 2053) * p(m, 2063) * p(m, 2069) * p(m, 2081) * p(m, 2083) * p(m, 2087) * p(m, 2089) * p(m, 2099) * p(m, 2111) * p(m, 2113) * p(m, 2129) * p(m, 2131) * p(m, 2137)
s18 = p(m, 2141) * p(m, 2143) * p(m, 2153) * p(m, 2161) * p(m, 2179) * p(m, 2203) * p(m, 2207) * p(m, 2213) * p(m, 2221) * p(m, 2237) * p(m, 2239) * p(m, 2243) * p(m, 2251) * p(m, 2267) * p(m, 2269) * p(m, 2273) * p(m, 2281)
s19 = p(m, 2287) * p(m, 2293) * p(m, 2297) * p(m, 2309) * p(m, 2311) * p(m, 2333) * p(m, 2339) * p(m, 2341) * p(m, 2347) * p(m, 2351) * p(m, 2357) * p(m, 2371) * p(m, 2377) * p(m, 2381) * p(m, 2383) * p(m, 2389) * p(m, 2393)
s20 = p(m, 2399) * p(m, 2411) * p(m, 2417) * p(m, 2423) * p(m, 2437) * p(m, 2441) * p(m, 2447) * p(m, 2459) * p(m, 2467) * p(m, 2473) * p(m, 2477) * p(m, 2503) * p(m, 2521) * p(m, 2531) * p(m, 2539) * p(m, 2543) * p(m, 2549)
s21 = p(m, 2551) * p(m, 2557) * p(m, 2579) * p(m, 2591) * p(m, 2593) * p(m, 2609) * p(m, 2617) * p(m, 2621) * p(m, 2633) * p(m, 2647) * p(m, 2657) * p(m, 2659) * p(m, 2663) * p(m, 2671) * p(m, 2677) * p(m, 2683) * p(m, 2687)
s22 = p(m, 2689) * p(m, 2693) * p(m, 2699) * p(m, 2707) * p(m, 2711) * p(m, 2713) * p(m, 2719) * p(m, 2729) * p(m, 2731) * p(m, 2741) * p(m, 2749) * p(m, 2753) * p(m, 2767) * p(m, 2777) * p(m, 2789) * p(m, 2791) * p(m, 2797)
s23 = p(m, 2801) * p(m, 2803) * p(m, 2819) * p(m, 2833) * p(m, 2837) * p(m, 2843) * p(m, 2851) * p(m, 2857) * p(m, 2861) * p(m, 2879) * p(m, 2887) * p(m, 2897) * p(m, 2903) * p(m, 2909) * p(m, 2917) * p(m, 2927) * p(m, 2939)
s24 = p(m, 2953) * p(m, 2957) * p(m, 2963) * p(m, 2969) * p(m, 2971) * p(m, 2999) * p(m, 3001) * p(m, 3011) * p(m, 3019) * p(m, 3023) * p(m, 3037) * p(m, 3041) * p(m, 3049) * p(m, 3061) * p(m, 3067) * p(m, 3079) * p(m, 3083)
qp = S * s1 * s2 * s3 * s4 * s5 * s6 * s7 * s8 * s9 * s10 * s11 * s12 * s13 * s14 * s15 * s16 * s17 * s18 * s19 * s20 * s21 * s22 * s23 * s24
End Function