Avrei una richiesta da fare.
Si tratta di scrivere l'algoritmo di Zakiya nel vostro linguaggio, Attualmente io e Zakiya abbiamo già le versioni Python e Ruby, ci servono algoritmi in altri linguaggi per fare grafici e comparazioni.
Il problema è che io so solo il Python e Zakiya solo il Python e il Ruby.
Vi chiederei di scrivere l'implementazione, perché poi saranno utilizzate tutte per fare grafici, e saranno messe su un blog o in un libro.
Possibilmente se potete ottimizzate il più possibile, e poi oltre che al codice fornite dettagli sul sistema e sui tempi.
Come implementare l'algoritmo:
Se non avete capito qualcosa dal codice non esitate a chiedere.
Grazie per l'attenzione.
P.S. La pagina di Wikipedia è in costruzione, se volete potete leggere l'articolo di Zakiya qui.
EDIT: Mi sono dimenticato di dire che il codice del pdf non è aggiornato, quindi non usatelo. Per scrivere l'algoritmo usate quello che vi ho detto. Il pdf comunque è molto utile lo stesso.
Si tratta di scrivere l'algoritmo di Zakiya nel vostro linguaggio, Attualmente io e Zakiya abbiamo già le versioni Python e Ruby, ci servono algoritmi in altri linguaggi per fare grafici e comparazioni.
Il problema è che io so solo il Python e Zakiya solo il Python e il Ruby.
Vi chiederei di scrivere l'implementazione, perché poi saranno utilizzate tutte per fare grafici, e saranno messe su un blog o in un libro.
Possibilmente se potete ottimizzate il più possibile, e poi oltre che al codice fornite dettagli sul sistema e sui tempi.
Come implementare l'algoritmo:
Codice:
def SoZP7a(val):
# all prime candidates > 7 are of form 210*k+(1,11,13,17,19,23,29,31,37
# 41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,121,127,131
# 137,139,143,149,151,157,163,167,169,173,179,181,187,191,193,197,199,209)
num = val-((val&1)^1) # se è pari sottrae 1
mod=210; rescnt=48 # valore del modulo; numero dei residui
maxprms = (rescnt*num)//mod # numero massimo di candidati per la primalitÃ
prms = [True]*maxprms # crea una lista di valori True lunga maxprms
primes = [2,3,5,7] # Inizializza la lista di numeri primi
# array di residui per trovare i candidati
residues = [1,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,
89,97,101,103,107,109,113,121,127,131,137,139,143,149,151,157,163,
167,169,173,179,181,187,191,193,197,199,209,211]
# hash di valori per trovare la posizione dei nonprimi nell'array prms
pos = {}
for i in xrange(rescnt): pos[residues[i]] = i-1 # riempie l'hash
# sieve to eliminate nonprimes from prms
limit = int(ceil(sqrt(val))) # calcola il limite: radice quadrata di val
x=r=0 # inizializza x e r a 0
for prm in prms: # cicla su ogni valore di prms
r += 1 # r = r + 1
if r > 48: r = 1; x += 210
if not prm: continue # se prm è falso passa al prossimo valore
prime = x + residues[r] # prime è uguale a x più l'elemento r di residues
if limit < prime: break # se limit è minore di prime blocca il ciclo
m = prime*48
for ri in residues[1:]: # cicla su ogni numero in residues tranne il primo
product = prime*(x+ri)
if product > val: break
# compute product position index in prms
qq,rr = divmod(product,210) # qq = product/210 rr = product % 210
nonprmpos = qq*48 + pos[rr]
for nprm in xrange(nonprmpos,maxprms,m): prms[nprm] = False
# the prms array now has all the positions for primes 11..N
if num < 9: return primes[:1+num//2]
if num < 11: return primes
n = (48*(x//210)) + r - 1
while not prms[n]: # cicla finché l'elemento di prms alla posizione n è Falso
n += 1; r += 1
if r > 48: r = 1; x += 210
for i in xrange(n,maxprms,1):
if prms[i]: primes.append(x+residues[r]) # aggiunge all'arrray primes il valore x + l'elemento di residues in posizione r
r += 1
if r > 48: r = 1; x += 210
if primes[-1] > num: primes.pop() # se l'ultimo elemento di primes è maggiore di num, elimina l'ultimo elemento di primes
return primes
Se non avete capito qualcosa dal codice non esitate a chiedere.
Grazie per l'attenzione.
P.S. La pagina di Wikipedia è in costruzione, se volete potete leggere l'articolo di Zakiya qui.
EDIT: Mi sono dimenticato di dire che il codice del pdf non è aggiornato, quindi non usatelo. Per scrivere l'algoritmo usate quello che vi ho detto. Il pdf comunque è molto utile lo stesso.