쌍둥이 소수 공식


w(n, 2)w(n+2, 2)w(n, 3)w(n+2, 3)w(n, 5)w(n+2, 5)w(n, 7)w(n+2, 7)w(n, 11)w(n+2, 11)w(n, 13)w(n+2, 13)w(n, 17)w(n+2, 17)w(n, 19)w(n+2, 19)w(n, 23)w(n+2, 23)w(n, 29)w(n+2, 29)w(n, 31)w(n+2, 31)w(n, 37)w(n+2, 37)w(n, 41)w(n+2, 41)w(n, 43)w(n+2, 43)w(n, 47)w(n+2, 47)w(n, 53)w(n+2, 53)w(n, 59)w(n+2, 59)w(n, 61)w(n+2, 61)w(n, 67)w(n+2, 67)w(n, 71)w(n+2, 71)w(n, 73)w(n+2, 73)w(n, 79)w(n+2, 79)w(n, 83)w(n+2, 83)w(n, 89)w(n+2, 89)w(n, 97)w(n+2, 97)w(n, 101)w(n+2, 101)w(n, 103)w(n+2, 103)w(n, 107)w(n+2, 107)w(n, 109)w(n+2, 109)w(n, 113)w(n+2, 113)w(n, 127)w(n+2, 127)w(n, 131)w(n+2, 131)w(n, 137)w(n+2, 137)w(n, 139)w(n+2, 139)w(n, 149)w(n+2, 149)w(n, 151)w(n+2, 151)w(n, 157)w(n+2, 157)w(n, 163)w(n+2, 163)w(n, 167)w(n+2, 167)w(n, 173)w(n+2, 173)w(n, 179)w(n+2, 179)w(n, 181)w(n+2, 181)w(n, 191)w(n+2, 191)w(n, 193)w(n+2, 193)w(n, 197)w(n+2, 197)w(n, 199)w(n+2, 199)w(n, 211)w(n+2, 211)w(n, 223)w(n+2, 223)w(n, 227)w(n+2, 227)w(n, 229)w(n+2, 229)w(n, 233)w(n+2, 233)w(n, 239)w(n+2, 239)w(n, 241)w(n+2, 241)w(n, 251)w(n+2, 251)w(n, 257)w(n+2, 257)w(n, 263)w(n+2, 263)w(n, 269)w(n+2, 269)w(n, 271)w(n+2, 271)w(n, 277)w(n+2, 277)w(n, 281)w(n+2, 281)w(n, 283)w(n+2, 283)w(n, 293)w(n+2, 293)w(n, 307)w(n+2, 307)w(n, 311)w(n+2, 311)w(n, 313)w(n+2, 313)w(n, 317)w(n+2, 317)w(n, 331)w(n+2, 331)w(n, 337)w(n+2, 337)w(n, 347)w(n+2, 347)w(n, 349)w(n+2, 349)w(n, 353)w(n+2, 353)w(n, 359)w(n+2, 359)w(n, 367)w(n+2, 367)w(n, 373)w(n+2, 373)w(n, 379)w(n+2, 379)w(n, 383)w(n+2, 383)w(n, 389)w(n+2, 389)w(n, 397)w(n+2, 397)w(n, 401)w(n+2, 401)w(n, 409)w(n+2, 409)w(n, 419)w(n+2, 419)w(n, 421)w(n+2, 421)w(n, 431)w(n+2, 431)w(n, 433)w(n+2, 433)w(n, 439)w(n+2, 439)w(n, 443)w(n+2, 443)w(n, 449)w(n+2, 449)w(n, 457)w(n+2, 457)w(n, 461)w(n+2, 461)w(n, 463)w(n+2, 463)w(n, 467)w(n+2, 467)w(n, 479)w(n+2, 479)w(n, 487)w(n+2, 487)w(n, 491)w(n+2, 491)w(n, 499)w(n+2, 499)w(n, 503)w(n+2, 503)w(n, 509)w(n+2, 509)w(n, 521)w(n+2, 521)w(n, 523)w(n+2, 523)w(n, 541)w(n+2, 541)w(n, 547)w(n+2, 547)w(n, 557)w(n+2, 557)w(n, 563)w(n+2, 563)w(n, 569)w(n+2, 569)w(n, 571)w(n+2, 571)w(n, 577)w(n+2, 577)w(n, 587)w(n+2, 587)w(n, 593)w(n+2, 593)w(n, 599)w(n+2, 599)w(n, 601)w(n+2, 601)w(n, 607)w(n+2, 607)w(n, 613)w(n+2, 613)w(n, 617)w(n+2, 617)w(n, 619)w(n+2, 619)w(n, 631)w(n+2, 631)w(n, 641)w(n+2, 641)w(n, 643)w(n+2, 643)w(n, 647)w(n+2, 647)w(n, 653)w(n+2, 653)w(n, 659)w(n+2, 659)w(n, 661)w(n+2, 661)w(n, 673)w(n+2, 673)w(n, 677)w(n+2, 677)w(n, 683)w(n+2, 683)w(n, 691)w(n+2, 691)w(n, 701)w(n+2, 701)w(n, 709)w(n+2, 709)w(n, 719)w(n+2, 719)w(n, 727)w(n+2, 727)w(n, 733)w(n+2, 733)w(n, 739)w(n+2, 739)w(n, 743)w(n+2, 743)w(n, 751)w(n+2, 751)w(n, 757)w(n+2, 757)w(n, 761)w(n+2, 761)w(n, 769)w(n+2, 769)w(n, 773)w(n+2, 773)w(n, 787)w(n+2, 787)w(n, 797)w(n+2, 797)w(n, 809)w(n+2, 809)w(n, 811)w(n+2, 811)w(n, 821)w(n+2, 821)w(n, 823)w(n+2, 823)w(n, 827)w(n+2, 827)w(n, 829)w(n+2, 829)w(n, 839)w(n+2, 839)w(n, 853)w(n+2, 853)w(n, 857)w(n+2, 857)w(n, 859)w(n+2, 859)w(n, 863)w(n+2, 863)w(n, 877)w(n+2, 877)w(n, 881)w(n+2, 881)w(n, 883)w(n+2, 883)w(n, 887)w(n+2, 887)w(n, 907)w(n+2, 907)w(n, 911)w(n+2, 911)w(n, 919)w(n+2, 919)w(n, 929)w(n+2, 929)w(n, 937)w(n+2, 937)w(n, 941)w(n+2, 941)w(n, 947)w(n+2, 947)w(n, 953)w(n+2, 953)w(n, 967)w(n+2, 967)w(n, 971)w(n+2, 971)w(n, 977)w(n+2, 977)w(n, 983)w(n+2, 983)w(n, 991)w(n+2, 991)w(n, 997)w(n+2, 997)

=1을 만족하는 (n, n+2)는 1,000,000 이하 쌍둥이 소수이다.



w(n, p) = δ(n, p) + τ([n]_p, 0)



import numpy as np

def omega_vec(arr, p):
delta = (arr == p).astype(np.int8)
tau = (arr % p != 0).astype(np.int8)
return delta + tau

def twin_primes(n):
arr = np.arange(n + 1)
one = np.ones(n + 1, dtype=bool)

# √n 이하 소수 동적 수집
limit = int(n**0.5) + 1
small_primes = []
for p in range(2, limit):
if all(p % q != 0 for q in small_primes):
small_primes.append(p)

print(f"√{n} 이하 소수: {small_primes}") # 확인용

s_sum = ""
for i in small_primes:
s_sum += f"w(n, {i})w(n+2, {i})"

print(s_sum)

# 소수 체
for p in small_primes:
one &= (omega_vec(arr, p) > 0)
one[0], one[1] = False, False

# 쌍둥이 소수 판별
twin_mask = one[:-2] & one[2:]
n_vals = np.where(twin_mask)[0]

return [(n, n+2) for n in n_vals]


N = 1_000_000
twin = twin_primes(N)
print(f"{N} 이하 쌍둥이 소수의 개수: {len(twin)}")
print(twin)

24b0d121e08268f720b5c6b236ef203ef050426af79cd34c


24b0d121e08268f420b5c6b236ef203eb37ce696de9402fa


24b0d121e08268f520b5c6b236ef203e6e6daa523f1d8969


24b0d121e08268f220b5c6b236ef203e37cca5cfce7ce7cc


24b0d121e08268f320b5c6b236ef203e5ac4d87d96072771


24b0d121e08268f020b5c6b236ef203e680e7b40bf0ee37f


24b0d121e08268f120b5c6b236ef203ea4f837c2143f2261


24b0d121e08268fe20b5c6b236ef203e517513603a2b1f2f


24b0d121e08268ff20b5c6b236ef203e911ccc1665b7e9fb


24b0d121e08269f620b5c6b236ef203e049c13ec5ae70696


24b0d121e08269f720b5c6b236ef203e4cf1e2d9b7aa1848


24b0d121e08269f420b5c6b236ef203e2e5bc8e30b5361aa


24b0d121e08269f520b5c6b236ef203e5f0412f2be31c04b


24b0d121e08269f220b5c6b236ef203e149f4801948aac6e


24b0d121e08269f320b5c6b236ef203e0428a687daf72ffa


24b0d121e08269f020b5c6b236ef203e7d2bcd1058e0c603


24b0d121e08269f120b5c6b236ef203ed0bb1d2f89329be0


24b0d121e08269fe20b5c6b236ef203ecd1a694a36369bd2


24b0d121e08269ff20b5c6b236ef203e6fa185c43a2bce29


24b0d121e0826af620b5c6b236ef203efc2afd4113a1d3a8


24b0d121e0826af720b5c6b236ef203e3c8ed17e44d11018


24b0d121e0826af420b5c6b236ef203ee2e6420486f1970e


24b0d121e0826af520b5c6b236ef203e92277fc702509a55


24b0d121e0826af220b5c6b236ef203eee7544b6dfed58dc


24b0d121e0826af320b5c6b236ef203e4aab84ac45e152e1


24b0d121e0826af020b5c6b236ef203ebab6f5d30a9b5c99


24b0d121e0826af120b5c6b236ef203e9ffd02065d03c116


24b0d121e0826afe20b5c6b236ef203e493b576c81e155f1


24b0d121e0826aff20b5c6b236ef203e5e8d3e94838acb71


24b0d121e0826bf620b5c6b236ef203e10dfb792fb3d3ead


24b0d121e0826bf720b5c6b236ef203e8469d4b46df47969


24b0d121e0826bf420b5c6b236ef203ed96157f270cdb431


24b0d121e0826bf520b5c6b236ef203eaf2159d866b28270


24b0d121e0826bf220b5c6b236ef203efc61aafdb7114524


24b0d121e0826bf320b5c6b236ef203e7434b928953042db


24b0d121e0826bf020b5c6b236ef203ef98864bff3cc760c


24b0d121e0826bf120b5c6b236ef203ec4065d28512fd133


24b0d121e0826bfe20b5c6b236ef203e89a50a9aa8e95249


24b0d121e0826bff20b5c6b236ef203e1da0c27fb415d4ee


24b0d121e0826cf620b5c6b236ef203e78f0b58815c20e67


24b0d121e0826cf720b5c6b236ef203eecb8ec20fde3feba


24b0d121e0826cf420b5c6b236ef203e81d09d0f75bd81bc


24b0d121e0826cf520b5c6b236ef203e26ad2c7b5f7175e0