Як випливає з мого попереднього запитання , я грав із гіпотезою Рімана як питання рекреаційної математики. У ході цього процесу я дійшов до досить цікавого повторення, і мені цікаво його назва, його скорочення та простежуваність до розв'язуваності проміжку між простими числами.
Вкрай кажучи, ми можемо визначити розрив між кожним простим числом як повторення попередніх прайменів- кандидатів . Наприклад, для нашої бази наступним простим числом буде:
Або, як ми бачимо, побудувавши це : .
Ми можемо повторити процес для простих праймерів, оцінюючи кожен кандидат, який повторюється вперед. Припустимо, ми хочемо отримати наступний прайм, . Наша функція кандидата стає:p 2
Де:
, як зазначено вище.
Неважко помітити, що кожна компонентна функція стає лише нульовою для цілих значень, і так само легко показати, як це чітко фіксує наші відносини у формі AND- та XOR, використовуючи властивості додавання та множення в контексті системи тригонометричної рівняння.
Рецидив стає:
... де вся проблема залежить від того, чи можемо ми оцінити оператора за цією функцією в поліноміальний час. Це, по суті, узагальнення сита Ератостена .
Робочий код Python для демонстрації повторення:
from math import cos,pi
def cosProduct(x,p):
""" Handles the cosine product in a handy single function """
ret = 1.0
for k in xrange(2,p+1):
ret *= -cos(2*pi*(x+k-1)/p)+1.0
return ret
def nthPrime(n):
""" Generates the nth prime, where n is a zero-based integer """
# Preconditions: n must be an integer greater than -1
if not isinstance(n,int) or n < 0:
raise ValueError("n must be an integer greater than -1")
# Base case: the 0th prime is 2, 0th function vacuous
if n == 0:
return 2,lambda x: 0
# Get the preceding evaluation
p_nMinusOne,fn_nMinusOne = nthPrime(n-1)
# Define the function for the Nth prime
fn_n = lambda x: fn_nMinusOne(x) + cosProduct(x,p_nMinusOne)
# Evaluate it (I need a solver here if it's tractable!)
for k in xrange(p_nMinusOne+1,int(p_nMinusOne**2.718281828)):
if fn_n(k) == 0:
p_n = k
break
# Return the Nth prime and its function
return p_n,fn_n
Швидкий приклад:
>>> [nthPrime(i)[0] for i in range(20)]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71]
Біда в тому, що я зараз перебуваю над головою, як математично, так і як комп'ютер. Зокрема, я не вмію аналізувати Фур'є , визначати рівномірні кришки або загалом складну площину , і я переживаю, що такий підхід є неправильним або приховує жахливий жах проблеми 3SAT, що піднімає його на NP-повнота.
Таким чином, у мене тут три питання:
- З огляду на моє короткочасне повторення, чи можна детерміновано обчислити чи оцінити розташування нулів у поліноміальному часі та просторі?
- Якщо так чи ні, то чи приховує якісь інші підпроблеми, які б зробили рішення поліметалічного чи поліпросторового нерозбірливим?
- І якщо якимось дивом (1) і (2) витримаєте, які динамічні вдосконалення програмування ви б зробили, задовольняючи цю повторюваність, з високого рівня? Зрозуміло, що ітерація над одними і тими ж цілими кількома функціями є неелегантною та досить марною.