Dimostrando la (in) trattabilità di questo ennesimo episodio ricorrente


18

Come segue dalla mia domanda precedente , ho giocato con l' ipotesi di Riemann come una questione di matematica ricreativa. Nel processo, sono arrivato a una ricorrenza piuttosto interessante e sono curioso di sapere il suo nome, le sue riduzioni e la sua trattabilità verso la solvibilità del divario tra i numeri primi.

In parole povere, possiamo definire il divario tra ciascun numero primo come una ricorrenza di numeri primi candidati precedenti . Ad esempio, per la nostra base di , il primo primo sarebbe:p0=2

p1=min{X>p0|-cos(2π(X+1)/p0)+1=0)}

Oppure, come vediamo tracciando questo : p1=3 .

Possiamo ripetere il processo per n numeri primi valutando ogni candidato primo ricorrente in avanti. Supponiamo di voler ottenere il prossimo numero primo, p2 . La nostra funzione candidata diventa:

p2=min{X>p1|fp1(X)+((-cos(2π(X+1)/p1)+1)(-cos(2π(X+2)/p1)+1))=0}

Dove:

fp1(X)=-cos(2π(X+1)/p0)+1 , come sopra.

È facile vedere che ogni funzione di componente diventa zero solo su valori interi, ed è altrettanto facile mostrare come questo cattura abilmente le nostre relazioni a forma di AND e XOR, sfruttando le proprietà di addizione e moltiplicazione nel contesto di un sistema di trigonometria equazioni.

La ricorrenza diventa:

fp0=0p0=2fpn(X)=fpn-1(X)+ΠK=2pn-1(-cos(2π(X+K-1)/pn-1)+1)pn=min{X>pn-1|fpn(X)=0}

... dove l'intero problema dipende dal fatto che possiamo valutare l' operatore min su questa funzione in tempo polinomiale. Questa è, in effetti, una generalizzazione del setaccio di Eratostene .

Codice Python funzionante per dimostrare la ricorrenza:

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

Un rapido esempio:

>>> [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]

Il guaio è che ora sono completamente sopra la mia testa, sia matematicamente che come informatico. In particolare, non sono competente con l'analisi di Fourier , con la definizione di coperture uniformi o con il piano complesso in generale, e sono preoccupato che questo approccio sia completamente sbagliato o nasconda un inorridito orrore di un problema 3SAT che lo eleva a NP-completezza.

Pertanto, ho tre domande qui:

  1. Data la mia concisa ricorrenza sopra, è possibile calcolare o stimare in modo deterministico la posizione degli zeri nel tempo e nello spazio polinomiale?
  2. Se è così o no, sta nascondendo altri sottoproblemi che renderebbero intrattabile una soluzione polytime o polyspace?
  3. E se per qualche miracolo (1) e (2) reggessero, quali miglioramenti di programmazione dinamica faresti per soddisfare questa ricorrenza, da un livello elevato? Chiaramente, l'iterazione sugli stessi numeri interi attraverso più funzioni è inelegante e piuttosto dispendiosa.

E per quelli che sono ancora qui nonostante il mio muro di testo: non sono sicuro che questo si riduca alla zeta di Riemann, dandole così la stessa complessità. Non credo, però.
Mr Gomez,

1
1) Quali tag vorresti? Puoi crearli tu stesso semplicemente usando loro. 2) Fornire una definizione generale per , ovvero che cos'è ? 3) Se non ricevi una risposta su questo dopo circa una settimana, potresti volerlo spostare così cstheory.SE. ff(pn)
Raffaello

1
Non sto seguendo tutto nel tuo post. Immagino che intendi NP-completo non NP. Dimostrare in generale che una funzione teorica numerica è NP-completa è un compito piuttosto difficile poiché spesso mancano / nascondono qualsiasi struttura combinatoria che ci consentirebbe di progettare gadget per la riduzione.
Kaveh,

1
Revisione completata. Ci saranno sicuramente altri problemi in agguato, ma la mia rappresentazione originale era del tutto fuori moda. Dovrei consultare il mio io più giovane di 24 ore e dargli un aggiornamento sulle definizioni appropriate di . In ogni caso, grazie per la pazienza e le modifiche apportate finora. Anche i tag attuali sono ora di mia soddisfazione. :)f(X)
Mr Gomez,

Per quanto riguarda , non è sufficiente "controllare" tutti i numeri primi più piccoli rispetto a tutti i numeri più piccoli? f
Raffaello

Risposte:


1

Il seguente documento mostra che PRIMES è in P (ha anche vinto un premio Gödel nel 2006):

http://www.cse.iitk.ac.in/users/manindra/algebra/primality_v6.pdf

Impostando la soluzione dell'ennesima procedura di minimizzazione in prime sull'algoritmo AKS PRIMES (modulo a sottrazione), potremmo effettivamente ottenere una soluzione trattabile per la relazione di ricorrenza (se puoi dimostrare che la differenza di ricorrenza è data dalla relazione di ricorrenza).

I codici sorgente possono essere trovati su Internet. Non li sto indicando qui perché non li ho controllati personalmente.

Come è tuttavia, potremmo avere ancora il limite superiore di per controllare tutti i numeri ...n


1
La pagina Rosettacode è completamente sbagliata. Questo non è il test di primalità di AKS, ed è una riaffermazione della divisione di prova di tutti i numeri interi inferiori a n. D'altra parte, notare che la primalità è in P e vedere se questo fa luce sulla domanda originale vale la pena porre.
DanaJ,

Buon punto ... lo aggiusterò ...
user13675

1
nlgn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.