Как следует из моего предыдущего вопроса , я играл с гипотезой Римана как с рекреационной математикой. В ходе этого процесса я столкнулся с довольно интересным повторением, и мне любопытно, как оно называется, как оно сокращается, и как оно приспосабливается к разрешимости разрыва между простыми числами.
Говоря кратко, мы можем определить разрыв между каждым простым числом как повторение предыдущих простых чисел- кандидатов . Например, для нашей базы следующее простое число будет:
Или, как мы видим из графика : .
Мы можем повторить процесс для простых чисел, оценивая каждого кандидата, повторяющегося вперед. Предположим, мы хотим получить следующее простое число, . Наша функция-кандидат становится:р 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-полнота.
Таким образом, у меня есть три вопроса здесь:
- Учитывая мой краткий рецидив выше, возможно ли детерминистически вычислить или оценить расположение нулей в полиномиальном времени и пространстве?
- Если так или нет, то скрывает ли он какие-либо другие подзадачи, которые делали бы решение Polytime или Polyspace неразрешимым?
- И если каким-то чудом (1) и (2) выдержать, какие усовершенствования в динамическом программировании вы бы выполнили для удовлетворения этого повторения с высокого уровня? Ясно, что итерации по одним и тем же целым числам через несколько функций неэлегатны и довольно расточительны.