Project Euler - Problem 12

Programmazione, algoritmica, teoria dell'informazione, ...
Avatar utente
Haile
Messaggi: 515
Iscritto il: 30 mag 2008, 14:29
Località: Bergamo

Project Euler - Problem 12

Messaggio da Haile »

Cos'è "Project Euler" in due parole:

http://projecteuler.net/index.php

Project Euler is a series of challenging mathematical/computer programming problems

Passando al problema #12:

What is the value of the first triangle number to have over five hundred divisors?

Qual è il primo numero triangolare con più di 500 divisori? (compresi l'1 e se stesso).

(premesso che lavoro in python) il mio tentativo di soluzione si basa semplicemente sulla definizione di una funzione div(n), che dato un intero n in input, dia in output il numero di suoi divisori: div(10) = 4.

Codice: Seleziona tutto

def div(n):
    ris = 1
    if n%2 == 0:
        for x in range(1, n/2+1):
            if n%x == 0:
                ris = ris + 1
        return ris
    else:
        for x in range(1, int(math.ceil(n/2))+1, 2):
           if n%x == 0:
                ris = ris + 1
        return ris

In pratica dato n, se n è pari controlla per tutti numeri $ $x$ $ da 1 a $ $ \frac{n}{2}$ $ se $ $ n \equiv 0 \pmod x $ $. Se sì, allora aumenta il counter del numero dei divisori di 1. Se n è dispari, controlla i numeri da 1 a $ $ \lceil \tfrac{n}{2} \rceil $ $ ma saltando tutti i pari (x = 1,3,5...)

Fatto questo, la mia idea prevedeva di far controllare al programma tutti i valori di div(n(n+1)/2) per n =1,2,3... fino a quando div >= 500.

Fatto sta che il mio PC impiega circa 6 minuti a trovare il primo numero triangolare con div() > 150... e il tentativo per div() > 300 l'ho stoppato dopo decine di minuti. Eppure:
an efficient implementation will allow a solution to be obtained on a modestly powered computer in less than one minute.
Qualche consiglio su come gestire diversamente il problema, o come migliorare la funzione div()?
[i]
Mathematical proofs are like diamonds: hard and clear.

[/i]
carlop
Messaggi: 13
Iscritto il: 16 gen 2008, 06:45
Località: Pisa

Messaggio da carlop »

Un paio di idee utili:

-se A divide N, allora anche N/A divide N (facendo attenzione al caso A=N/A)

-la funzione che conta i divisori è una funzione moltiplicativa, cioè se gcd(A,B)=1 allora div(A*B)=div(A)*div(B) (quale sarà la scelta conveniente di due fattori coprimi per un numero triangolare ?)


Credo che implementando una sola delle due idee (o anche entrambe) dovresti riuscire piuttosto in fretta (qualche secondo) a trovare la soluzione.
Avatar utente
SkZ
Messaggi: 3333
Iscritto il: 03 ago 2006, 21:02
Località: Concepcion, Chile
Contatta:

Messaggio da SkZ »

ti consiglierei inoltre una "libreria" di numeri primi: i primi 10.000 sono facilmente reperibili ( http://primes.utm.edu/lists/ ) e velocizzi molto i conti assieme al secondo suggerimento di carlop
impara il [tex]~\LaTeX[/tex] e mettilo da par[tex]\TeX~[/tex]

Software is like sex: it's better when it's free (Linus T.)
membro: Club Nostalgici
Non essere egoista, dona anche tu! http://fpv.hacknight.org/a8.php
Avatar utente
Haile
Messaggi: 515
Iscritto il: 30 mag 2008, 14:29
Località: Bergamo

Messaggio da Haile »

Ho implementato la seconda, che si è rivelata vincente... risultato trovato in 14.51 secondi 8) $ T_{12375} = 76576500 = 2^2 \cdot 3^2 \cdot 5^3 \cdot 7 \cdot 11 \cdot 13 \cdot 17 $ e con 576 divisori.

Grazie mille, peccato non esserci arrivato... sapevo della molteplicità della funzione ma stupidamente non ho pensato di sfruttarla :(
[i]
Mathematical proofs are like diamonds: hard and clear.

[/i]
Avatar utente
SkZ
Messaggi: 3333
Iscritto il: 03 ago 2006, 21:02
Località: Concepcion, Chile
Contatta:

Messaggio da SkZ »

si dovrebbe riuscire ad arrivarci anche a mano
il prodotto dei primi n numeri primi ha $ ~2^n $ divisori ergo servono 9 primi per 512
sostituendo $ ~2^5 $ a $ ~2\cdot 23 $ e $ ~3^3 $ a $ ~3\cdot 19 $
mi viene $ $73513440=2^5\cdot3^3\cdot5\cdot7\cdot11\cdot13\cdot17 $ con $ ~(5+1)(3+1)(1+1)(1+1)(1+1)(1+1)(1+1)=768 $ che minore del tuo :?

a conti fatti $ $2^3\cdot3^3\cdot5\cdot7\cdot11\cdot13\cdot17=18378360 $ con $ ~(3+1)(3+1)(1+1)(1+1)(1+1)(1+1)(1+1)=512 $ e' forse il piu' piccolo, ma forse si puo' fare di meglio
impara il [tex]~\LaTeX[/tex] e mettilo da par[tex]\TeX~[/tex]

Software is like sex: it's better when it's free (Linus T.)
membro: Club Nostalgici
Non essere egoista, dona anche tu! http://fpv.hacknight.org/a8.php
Avatar utente
Haile
Messaggi: 515
Iscritto il: 30 mag 2008, 14:29
Località: Bergamo

Messaggio da Haile »

SkZ ha scritto:si dovrebbe riuscire ad arrivarci anche a mano
il prodotto dei primi n numeri primi ha $ ~2^n $ divisori ergo servono 9 primi per 512
sostituendo $ ~2^5 $ a $ ~2\cdot 23 $ e $ ~3^3 $ a $ ~3\cdot 19 $
mi viene $ $73513440=2^5\cdot3^3\cdot5\cdot7\cdot11\cdot13\cdot17 $ con $ ~(5+1)(3+1)(1+1)(1+1)(1+1)(1+1)(1+1)=768 $ che minore del tuo :?

a conti fatti $ $2^3\cdot3^3\cdot5\cdot7\cdot11\cdot13\cdot17=18378360 $ con $ ~(3+1)(3+1)(1+1)(1+1)(1+1)(1+1)(1+1)=512 $ e' forse il piu' piccolo, ma forse si puo' fare di meglio
A me non risulta che 73513440 e 18378360 siano numeri triangolari...
[i]
Mathematical proofs are like diamonds: hard and clear.

[/i]
Avatar utente
SkZ
Messaggi: 3333
Iscritto il: 03 ago 2006, 21:02
Località: Concepcion, Chile
Contatta:

Messaggio da SkZ »

neppure a me :D
:oops: ok, dimenticato una ipotesi

18378360 e' cmq il piu' piccolo con piu' di 500 divisori (forse) :wink:
Ultima modifica di SkZ il 23 giu 2009, 20:20, modificato 1 volta in totale.
impara il [tex]~\LaTeX[/tex] e mettilo da par[tex]\TeX~[/tex]

Software is like sex: it's better when it's free (Linus T.)
membro: Club Nostalgici
Non essere egoista, dona anche tu! http://fpv.hacknight.org/a8.php
Avatar utente
Haile
Messaggi: 515
Iscritto il: 30 mag 2008, 14:29
Località: Bergamo

Messaggio da Haile »

SkZ ha scritto:neppure a me :D
:oops: ok, dimenticato una ipotesi
Beh, senza quell'ipotesi non ci sarebbe stato certo bisogno di scrivere un programma :lol:
[i]
Mathematical proofs are like diamonds: hard and clear.

[/i]
dario2994
Messaggi: 1428
Iscritto il: 10 dic 2008, 21:30

Messaggio da dario2994 »

Scusate... ma secondo me qua l'algoritmo usato non è "molto ottimizzato"... io in javascript ho fatto un programma che trova tutto in 370ms... e si parla di js che è il linguaggio più lento in assoluto. Non è un post di vanto, è solo per consigliarvi di riguardare i vostri algoritmi... si può fare di molto meglio ;)
In ogni caso complimenti a chi ha risolto questo problema :)
Mi cimento anche io in quel progetto, sono curioso xD
Avatar utente
SkZ
Messaggi: 3333
Iscritto il: 03 ago 2006, 21:02
Località: Concepcion, Chile
Contatta:

Messaggio da SkZ »

qual e' l'andamento del numero di divisori dei numeri triangolari?
impara il [tex]~\LaTeX[/tex] e mettilo da par[tex]\TeX~[/tex]

Software is like sex: it's better when it's free (Linus T.)
membro: Club Nostalgici
Non essere egoista, dona anche tu! http://fpv.hacknight.org/a8.php
dario2994
Messaggi: 1428
Iscritto il: 10 dic 2008, 21:30

Messaggio da dario2994 »

[2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 16, 8, 4, 8, 8, 4, 8, 16, 8, 4, 4, 8, 16, 8, 4, 8, 8, 4, 8, 24, 12, 8, 8, 8, 16, 8, 4, 12, 12, 4, 8, 16, 8, 8, 16, 24, 24, 8, 4, 8, 8, 4, 12, 36, 24, 16, 8, 8, 16, 8, 4, 12, 12, 4, 8, 16, 16, 16, 8, 16, 48, 12, 4, 16, 32, 8, 8, 24, 12, 8, 16, 16, 16, 8, 8, 32, 16, 4, 12, 24, 8, 8, 8, 12, 24, 8, 4, 16, 16, 8, 16, 32, 16, 8, 16, 16, 24, 12, 8, 24, 12, 4, 8, 16, 16, 24, 12, 16, 32, 16, 8, 16, 32, 8, 12, 36, 12, 8, 8, 8, 16, 8, 4, 16, 32, 8, 8, 16, 8, 8, 8, 12, 36, 24, 16, 32, 16, 4, 8, 40, 40, 24, 12, 8, 32, 16, 4, 24, 24, 8, 24, 24, 8, 8, 16, 32, 32, 8, 4, 16, 16, 8, 16, 24, 24, 16, 16, 16, 32, 32, 8, 20, 20, 4, 16, 32, 8, 12, 12, 12, 24, 8, 8, 32, 32, 8, 12, 48, 32, 16, 8, 8, 16, 8, 8, 48, 48, 8, 8, 32, 32, 16, 8, 20, 60, 12, 4, 16, 16, 8, 32, 48, 12, 12, 24, 16, 16, 16, 8, 16, 16, 4, 16, 32, 16, 16, 16, 24, 24, 16, 8, 24, 48, 8, 16, 80, 20, 8, 16, 32, 48, 12, 4, 24, 48, 16, 16, 16, 8, 12, 12, 16, 64, 16, 12, 48, 16, 4, 12, 36, 12, 8, 8, 8, 32, 16, 8, 40, 20, 8, 16, 16, 8, 8, 16, 24, 48, 16, 8, 32, 32, 8, 8, 32, 32, 24, 12, 16, 32, 16, 8, 24, 24, 4, 12, 24, 8, 8, 16, 48, 48, 16, 8, 24, 72, 12, 8, 24, 24, 32, 16, 8, 24, 12, 8, 64, 32, 4, 8, 32, 32, 24, 24, 24, 48, 16, 4, 16, 16, 8, 32, 80, 20, 8, 16, 16, 32, 16, 4, 24, 24, 4, 8, 32, 32, 16, 8, 16, 48, 24, 16, 32, 16, 8, 32, 48, 24, 32, 16, 16, 32, 8, 4, 24, 96, 16, 12, 24, 8, 16, 32, 24, 24, 8, 8, 48, 24, 4, 16, 64, 16, 8, 16, 16, 32, 32, 16, 48, 24, 8, 16, 16, 16, 24, 24, 40, 40, 16, 8, 16, 16, 4, 12, 36, 36, 24, 16, 16, 16, 16, 8, 32, 32, 8, 32, 32, 16, 16, 8, 24, 72, 24, 8, 16, 32, 8, 8, 48, 24, 12, 24, 16, 16, 8, 16, 96, 24, 4, 16, 64, 16, 16, 16, 16, 64, 16, 4, 24, 48, 16, 16, 24, 24, 16, 24, 48, 48, 12, 4, 20, 40, 8, 16, 32, 16, 32, 16, 12, 24, 16, 8, 16, 32, 16, 48, 96, 32, 16, 8, 16, 32, 8, 4, 36, 72, 16, 16, 16, 8, 16, 32, 48, 96, 16, 8, 32, 32, 16, 16, 48, 24, 12, 12, 8, 32, 16, 8, 64, 32, 8, 24, 48, 32, 16, 16, 24, 24, 8, 12, 72, 24, 4, 8, 40, 40, 32, 16, 8, 24, 36, 24, 48, 48, 8, 16, 32, 8, 12, 24, 32, 64, 16, 4, 16, 32, 8, 20, 60, 12, 16, 16, 8, 16, 16, 24, 72, 24, 4, 8, 32, 32, 16, 16, 24, 72, 24, 4, 16, 32, 16, 16, 32, 16, 16, 64, 32, 16, 16, 8, 24, 24, 8, 24, 24, 16, 16, 8, 20, 80, 32, 16, 48, 24, 4, 16, 96, 24, 8, 8, 16, 64, 16, 8, 64, 96, 12, 16, 32, 16, 24, 12, 12, 24, 8, 8, 32, 48, 24, 24, 84, 28, 8, 8, 16, 64, 16, 4, 36, 72, 24, 48, 32, 8, 8, 16, 32, 48, 24, 8, 32, 32, 4, 16, 48, 48, 48, 24, 16, 16, 16, 16, 80, 40, 4, 16, 32, 8, 8, 16, 48, 48, 16, 8, 24, 48, 16, 16, 32, 32, 32, 16, 8, 48, 24, 8, 48, 48, 8, 8, 32, 16, 16, 32, 48, 96, 16, 8, 32, 16, 8, 24, 36, 24, 32, 32, 16, 16, 8, 4, 32, 64, 8, 8, 16, 24, 24, 8, 24, 120, 40, 16, 32, 16, 4, 16, 80, 40, 24, 12, 16, 64, 32, 8, 24, 48, 8, 12, 48, 32, 32, 16, 16, 32, 16, 16, 64, 32, 4, 16, 96, 24, 8, 16, 16, 48, 24, 8, 56, 28, 16, 32, 16, 8, 12, 36, 36, 48, 16, 8, 64, 64, 16, 32, 64, 32, 16, 8, 8, 16, 16, 16, 72, 72, 8, 16, 32, 8, 16, 32, 40, 60, 12, 8, 32, 64, 32, 16, 24, 12, 16, 16, 16, 32, 16, 16, 64, 64, 8, 24, 96, 16, 8, 8, 12, 72, 48, 8, 24, 24, 8, 16, 48, 72, 24, 16, 32, 64, 16, 4, 24, 24, 4, 8, 16, 16, 24, 24, 32, 32, 24, 24, 32, 16, 8, 48, 72, 12, 8, 8, 16, 64, 16, 4, 40, 80, 8, 8, 32, 32, 32, 32, 24, 36, 24, 24, 48, 16, 4, 8, 64, 32, 12, 12, 16, 64, 16, 4, 24, 48, 16, 40, 40, 16, 16, 16, 56, 112, 16, 4, 24, 48, 16, 32, 48, 24, 16, 8, 8, 24, 48, 16, 32, 64, 8, 16, 32, 16, 32, 16, 24, 48, 8, 8, 64, 96, 12, 12, 60, 20, 16, 48, 24, 16, 8, 16, 144, 36, 8, 16, 32, 16, 8, 16, 32, 64, 32, 8, 16, 32, 24, 24, 48, 24, 12, 24, 16, 32, 16, 8, 48, 24, 8, 24, 24, 16, 32, 16, 12, 24, 16, 8, 32, 64, 8, 24, 96, 16, 8, 16, 32, 48, 12, 4, 24, 48, 16, 32, 64, 32, 48, 24, 20, 40, 16, 16, 32, 16, 4, 16, 96, 48, 16, 16, 16, 32, 16, 8, 96, 48, 8, 16, 32, 16, 8, 32, 48, 36, 12, 4, 32, 32, 8, 32, 112, 84, 48, 32, 16, 32, 32, 8, 24, 24, 8, 48, 96, 32, 16, 8, 32, 64, 8, 8, 48, 96, 16, 8, 24, 12, 16, 16, 8, 40, 40, 16, 80, 80, 8, 8, 32, 16, 12, 12, 24, 96, 32, 16, 32, 16, 8, 48, 96, 32, 16, 24, 24, 16, 24, 24, 72, 72, 8, 8, 16, 32, 32, 8, 24, 72, 24, 8, 32, 32, 4, 16, 48, 12, 12, 24, 48, 48, 16, 8, 32, 128, 32, 32, 32, 8, 16, 32, 24, 48, 16, 8, 48, 24, 8, 16, 40, 40, 32, 16, 8, 48, 24, 12, 72, 24, 8, 32, 32, 16, 40, 40, 32, 32, 8, 8, 64, 64, 8, 12, 36, 24, 16, 16, 32, 32, 24, 12, 28, 28, 4, 32, 64, 16, 16, 16, 48, 96, 32, 8, 16, 32, 16, 16, 32, 32, 48, 24, 8, 32, 16, 12, 72, 48, 16, 24, 48, 16, 8, 16, 40, 80, 16, 4, 32, 64, 32, 32, 24, 12, 8, 16, 32, 96, 24, 8, 64, 32, 4, 8, 32, 32, 24, 24, 24, 48, 32, 16, 32, 16, 4, 20, 120, 24, 16, 32, 32, 64, 32, 8, 36, 108, 12, 8, 16, 8, 16, 16, 32, 96, 12, 16, 64, 16, 4, 16, 96, 48, 32, 32, 16, 32, 32, 16, 80, 40, 12, 36, 24, 16, 32, 32, 24, 24, 16, 8, 24, 48, 8, 8, 32, 64, 32, 16, 16, 32, 32, 16, 48, 48, 24, 72, 96, 16, 12, 12, 32, 128, 16, 4, 16, 32, 8, 12, 72, 24, 16, 16, 8, 16, 8, 16, 192, 48, 8, 16, 48, 24, 16, 16, 12, 72, 24, 4, 16, 64, 32, 32, 80, 40, 24, 24, 32, 32, 8, 4, 48, 48, 4, 16, 32, 24, 48, 16, 16, 32, 32, 32, 48, 48, 16, 32, 48, 24, 16, 16, 32, 48, 24, 16, 96, 96, 8, 8, 16, 16, 32, 32, 24, 48, 16, 8, 32, 32, 16, 24, 96, 32, 8, 16, 32, 128, 32, 4, 36, 36, 8, 16, 32, 16, 8, 32, 80, 100, 40, 16, 64, 32, 4, 8, 24, 24, 48, 48, 16, 16, 16, 16, 64, 64, 16, 48, 48, 16, 16, 8, 24, 48, 8, 8, 64, 64, 16, 32, 112, 28, 16, 32, 16, 24, 24, 16, 48, 48, 8, 16, 64, 48, 36, 12, 16, 96, 48, 8, 32, 32, 8, 32, 48, 12, 8, 32, 32, 16, 8, 4, 40, 80, 16, 32, 32, 16, 16, 8, 12, 72, 72, 12, 16, 16, 4, 16, 128, 64, 40, 20, 16, 32, 16, 32, 96, 48, 8, 12, 24, 16, 32, 16, 24, 48, 16, 24, 72, 48, 8, 16, 96, 24, 16, 16, 16, 128, 32, 4, 32, 32, 8, 32, 32, 8, 12, 48, 96, 48, 16, 8, 32, 64, 8, 12, 60, 80, 32, 16, 32, 32, 16, 8, 48, 96, 8, 16, 32, 16, 32, 48, 96, 96, 12, 4, 16, 48, 24, 16, 24, 24, 48, 24, 8, 32, 32, 16, 64, 64, 8, 20, 160, 64, 16, 8, 12, 48, 16, 16, 96, 24, 12, 48, 64, 16, 16, 32, 16, 24, 24, 8, 48, 96, 16, 16, 32, 32, 32, 16, 20, 40, 16, 8, 16, 32, 8, 24, 72, 24, 16, 8, 16, 64, 32, 8, 48, 96, 16, 16, 16, 16, 32, 32, 24, 48, 16, 16, 128, 32, 8, 32, 96, 24, 12, 24, 16, 32, 32, 8, 24, 24, 16, 48, 48, 16, 8, 16, 32, 96, 24, 4, 32, 32, 4, 8, 48, 96, 32, 8, 16, 48, 24, 16, 80, 80, 16, 32, 32, 8, 24, 48, 48, 48, 8, 8, 32, 64, 16, 16, 64, 32, 48, 48, 32, 64, 16, 8, 72, 36, 4, 16, 64, 32, 16, 8, 28, 168, 72, 12, 16, 16, 8, 16, 48, 48, 32, 48, 24, 32, 16, 8, 64, 32, 4, 24, 48, 16, 16, 16, 24, 24, 16, 16, 48, 24, 8, 32, 80, 20, 8, 8, 24, 144, 48, 16, 48, 96, 16, 8, 32, 16, 24, 48, 32, 32, 8, 16, 64, 32, 8, 12, 72, 24, 16, 16, 8, 48, 24, 8, 96, 192, 32, 16, 16, 8, 8, 16, 48, 72, 24, 16, 64, 32, 8, 32, 64, 32, 24, 12, 16, 64, 48, 24, 48, 24, 4, 32, 64, 16, 16, 8, 40, 80, 8, 4, 24, 48, 8, 16, 96, 48, 32, 64, 32, 24, 12, 12, 96, 32, 8, 16, 32, 32, 40, 20, 12, 96, 64, 8, 16, 16, 8, 24, 96, 64, 32, 32, 16, 16, 8, 8, 72, 36, 8, 16, 32, 32, 32, 32, 32, 64, 32, 8, 16, 48, 12, 16, 48, 24, 24, 24, 64, 64, 8, 4, 40, 120, 24, 48, 48, 16, 32, 16, 12, 48, 32, 16, 64, 64, 8, 8, 64, 64, 16, 16, 16, 48, 48, 8, 48, 48, 12, 24, 16, 16, 24, 48, 96, 48, 8, 8, 64, 32, 12, 60, 60, 24, 16, 8, 8, 32, 64, 16, 48, 48, 4, 24, 96, 16, 8, 8, 24, 144, 24, 8, 32, 64, 32, 32, 80, 20, 16, 32, 32, 32, 8, 8, 48, 48, 16, 24, 72, 24, 8, 16, 64, 128, 16, 4, 24, 48, 16, 48, 72, 12, 16, 32, 16, 32, 32, 16, 56, 56, 8, 8, 32, 96, 72, 24, 24, 24, 16, 8, 32, 32, 4, 24, 96, 32, 16, 16, 32, 32, 8, 8, 96, 96, 16, 32, 32, 8, 24, 24, 20, 120, 24, 16, 64, 32, 16, 16, 48, 48, 24, 24, 16, 32, 16, 8, 64, 64, 16, 32, 64, 16, 16, 48, 72, 48, 16, 8, 48, 96, 8, 8, 48, 48, 16, 8, 16, 96, 48, 16, 48, 24, 4, 32, 64, 8, 16, 16, 32, 128, 32, 8, 16, 32, 16, 24, 36, 36, 48, 16, 8, 32, 32, 32, 240, 60, 4, 8, 32, 32, 16, 16, 48, 120, 20, 4, 16, 16, 16, 32, 32, 32, 24, 48, 32, 32, 16, 4, 48, 96, 8, 12, 48, 32, 32, 32, 64, 64, 24, 24, 64, 32, 8, 32, 48, 36, 48, 32, 32, 48, 12, 4, 32, 128, 16, 16, 64, 16, 24, 48, 48, 48, 16, 24, 48, 32, 8, 32, 320, 40, 8, 8, 8, 32, 32, 8, 36, 36, 16, 64, 32, 32, 32, 16, 32, 48, 12, 4, 32, 64, 8, 8, 24, 24, 40, 60, 48, 64, 32, 8, 48, 48, 8, 48, 48, 16, 16, 16, 48, 96, 16, 8, 48, 96, 16, 8, 64, 32, 16, 16, 16, 64, 32, 32, 96, 24, 4, 16, 64, 16, 24, 24, 20, 80, 32, 16, 32, 32, 24, 36, 36, 12, 8, 16, 48, 48, 16, 16, 96, 48, 8, 32, 32, 16, 16, 16, 24, 36, 48, 32, 32, 32, 8, 24, 168, 56, 24, 12, 16, 32, 8, 8, 96, 192, 16, 24, 48, 16, 32, 32, 32, 64, 16, 8, 48, 48, 16, 16, 72, 72, 16, 8, 16, 96, 24, 4, 40, 40, 16, 64, 64, 16, 16, 32, 24, 24, 8, 8, 64, 32, 8, 48, 96, 48, 48, 32, 16, 16, 16, 16, 72, 144, 16, 16, 64, 16, 8, 8, 24, 96, 32, 8, 32, 64, 8, 16, 48, 24, 48, 24, 8, 16, 24, 48, 128, 64, 8, 12, 48, 32, 32, 32, 24, 48, 32, 8, 40, 40, 8, 16, 40, 20, 8, 48, 48, 48, 48, 16, 96, 48, 8, 16, 16, 16, 24, 12, 16, 64, 32, 16, 32, 16, 8, 64, 192, 24, 8, 24, 72, 96, 16, 12, 96, 64, 8, 8, 16, 8, 32, 32, 12, 36, 24, 16, 32, 32, 16, 16, 64, 64, 32, 32, 32, 96, 24, 8, 48, 48, 16, 48, 96, 16, 8, 16, 40, 80, 32, 8, 48, 48, 4, 16, 48, 48, 64, 16, 8, 40, 60, 12, 32, 64, 16, 32, 64, 16, 12, 24, 48, 48, 8, 8, 32, 64, 32, 24, 72, 48, 32, 16, 8, 32, 16, 16, 192, 48, 8, 32, 128, 32, 8, 8, 16, 96, 24, 16, 64, 16, 8, 16, 48, 24, 24, 48, 16, 32, 32, 8, 40, 120, 12, 16, 32, 32, 32, 16, 48, 96, 32, 8, 24, 48, 16, 64, 128, 16, 16, 32, 32, 48, 24, 8, 24, 72, 12, 8, 16, 16, 40, 80, 112, 56, 8, 8, 64, 32, 8, 24, 72, 24, 16, 32, 32, 64, 16, 4, 48, 96, 24, 48, 32, 16, 16, 16, 24, 96, 32, 4, 32, 64, 8, 8, 80, 160, 48, 12, 8, 16, 32, 32, 48, 24, 4, 36, 72, 8, 16, 32, 64, 64, 16, 16, 64, 128, 32, 16, 24, 24, 32, 32, 32, 48, 24, 16, 96, 96, 8, 24, 144, 48, 24, 12, 12, 48, 32, 16, 64, 64, 16, 40, 80, 32, 16, 16, 32, 32, 8, 8, 72, 36, 8, 16, 16, 24, 24, 16, 40, 60, 48, 16, 16, 32, 16, 32, 48, 24, 32, 16, 16, 64, 32, 8, 32, 64, 16, 24, 72, 24, 24, 24, 24, 96, 16, 16, 96, 24, 4, 8, 72, 72, 32, 32, 16, 64, 32, 8, 48, 48, 16, 16, 16, 16, 24, 36, 96, 64, 8, 4, 32, 64, 8, 24, 72, 48, 32, 16, 16, 16, 32, 16, 60, 60, 4, 16, 64, 48, 24, 16, 72, 108, 12, 8, 64, 64, 8, 16, 64, 16, 24, 48, 16, 32, 16, 8, 48, 24, 16, 64, 64, 16, 16, 32, 48, 144, 48, 16, 48, 48, 16, 16, 48, 24, 8, 32, 32, 24, 12, 16, 256, 128, 8, 8, 16, 16, 32, 16, 12, 24, 24, 24, 64, 64, 8, 24, 120, 20, 8, 8, 32, 64, 16, 8, 36, 144, 32, 32, 64, 32, 32, 16, 16, 96, 48, 24, 48, 16, 8, 32, 96, 48, 24, 12, 16, 64, 32, 8, 56, 56, 8, 48, 48, 8, 8, 48, 72, 24, 16, 8, 32, 64, 16, 32, 64, 32, 32, 16, 8, 48, 48, 8, 24, 24, 8, 32, 64, 64, 48, 12, 40, 80, 8, 8, 32, 48, 24, 32, 96, 24, 32, 32, 8, 16, 8, 8, 96, 192, 16, 16, 64, 16, 8, 16, 48, 144, 24, 8, 32, 16, 16, 64, 96, 24, 20, 80, 64, 32, 16, 16, 96, 96, 8, 12, 24, 32, 32, 8, 16, 64, 32, 16, 96, 96, 16, 48, 72, 12, 8, 16, 32, 64, 32, 24, 120, 80, 16, 16, 32, 16, 24, 24, 12, 72, 48, 32, 64, 16, 4, 12, 96, 32, 8, 8, 8, 64, 64, 16, 96, 48, 8, 16, 32, 32, 32, 32, 64, 96, 12, 4, 32, 128, 32, 16, 24, 36, 36, 24, 32, 64, 32, 16, 64, 32, 8, 40, 40, 8, 16, 32, 48, 48, 24, 12, 24, 48, 8, 16, 80, 80, 96, 24, 16, 48, 12, 8, 96, 48, 4, 8, 32, 16, 16, 32, 32, 64, 16, 8, 32, 32, 32, 96, 72, 36, 24, 32, 32, 32, 16, 4, 48, 96, 16, 16, 32, 32, 32, 16, 12, 48, 32, 24, 48, 32, 8, 16, 64, 16, 24, 48, 48, 48, 8, 4, 24, 96, 16, 12, 24, 8, 16, 32, 80, 80, 16, 32, 160, 40, 4, 16, 96, 48, 16, 16, 32, 144, 144, 16, 32, 64, 16, 16, 16, 16, 24, 24, 24, 48, 32, 8, 32, 64, 8, 16, 112, 112, 32, 16, 32, 32, 24, 24, 72, 36, 8, 32, 32, 8, 16, 32, 64, 192, 24, 4, 32, 64, 8, 16, 96, 24, 32, 32, 8, 16, 8, 24, 240, 80, 8, 12, 48, 32, 32, 32, 24, 48, 16, 8, 48, 72, 48, 32, 64, 64, 16, 16, 32, 80, 20, 4, 48, 48, 8, 32, 32, 16, 24, 24, 48, 96, 64, 16, 16, 32, 16, 48, 144, 48, 16, 8, 16, 64, 16, 4, 64, 192, 24, 16, 16, 16, 32, 32, 24, 36, 24, 16, 64, 32, 12, 24, 80, 40, 12, 24, 16, 64, 32, 8, 48, 24, 12, 48, 64, 32, 16, 32, 64, 32, 16, 32, 192, 48, 4, 8, 24, 24, 32, 16, 16, 96, 48, 16, 72, 72, 16, 48, 48, 16, 40, 20, 48, 192, 32, 8, 16, 32, 8, 24, 96, 16, 16, 32, 16, 16, 32, 32, 72, 72, 8, 8, 48, 48, 32, 32, 40, 160, 32, 8, 64, 32, 8, 32, 48, 24, 24, 48, 64, 32, 8, 4, 64, 64, 8, 24, 48, 64, 32, 16, 48, 96, 32, 16, 64, 64, 8, 32, 192, 24, 8, 16, 32, 48, 12, 8, 48, 96, 32, 16, 16, 16, 48, 48, 32, 32, 16, 16, 32, 64, 16, 24, 144, 48, 32, 16, 16, 64, 16, 4, 60, 60, 8, 32, 64, 32, 16, 24, 36, 36, 24, 16, 64, 32, 8, 16, 32, 96, 96, 16, 8, 16, 32, 16, 48, 96, 8, 24, 96, 32, 32, 32, 56, 112, 16, 4, 24, 48, 16, 16, 24, 12, 16, 48, 48, 128, 32, 8, 64, 32, 4, 16, 128, 32, 12, 24, 48, 144, 24, 8, 32, 16, 8, 24, 60, 40, 48, 48, 16, 32, 16, 8, 96, 96, 8, 16, 32, 32, 32, 16, 64, 96, 48, 16, 16, 16, 4, 32, 192, 24, 12, 12, 16, 32, 16, 16, 96, 96, 16, 32, 64, 32, 32, 16, 12, 24, 8, 12, 144, 96, 16, 16, 64, 64, 16, 24, 24, 48, 48, 16, 48, 96, 64, 32, 16, 16, 32, 32, 40, 80, 32, 8, 48, 48, 8, 24, 72, 48, 32, 16, 8, 16, 16, 32, 192, 48, 4, 32, 64, 16, 32, 16, 24, 120, 40, 8, 16, 96, 24, 8, 64, 32, 24, 24, 24, 96, 16, 16, 96, 48, 8, 24, 96, 32, 16, 8, 32, 128, 32, 8, 32, 64, 24, 24, 24, 24, 32, 64, 32, 24, 24, 8, 40, 40, 4, 16, 32, 16, 48, 96, 48, 24, 16, 8, 16, 16, 8, 64, 128, 32, 16, 16, 32, 96, 48, 16, 72, 72, 8, 8, 32, 16, 16, 16, 24, 144, 24, 16, 64, 32, 8, 16, 144, 72, 48, 48, 32, 64, 32, 8, 32, 64, 32, 48, 24, 8, 8, 16, 48, 96, 16, 8, 96, 96, 16, 32, 80, 60, 24, 16, 16, 32, 64, 32, 48, 24, 8, 32, 32, 16, 24, 24, 64, 128, 16, 8, 64, 128, 16, 12, 36, 12, 24, 96, 32, 16, 16, 16, 112, 56, 16, 32, 32, 16, 8, 8, 12, 144, 48, 4, 16, 16, 8, 32, 128, 64, 24, 36, 48, 64, 32, 24, 144, 48, 4, 20, 80, 64, 64, 32, 40, 40, 16, 8, 24, 48, 8, 16, 96, 48, 32, 16, 24, 72, 24, 16, 64, 64, 8, 16, 32, 24, 96, 32, 12, 24, 16, 32, 64, 16, 4, 24, 288, 96, 16, 16, 16, 48, 24, 4, 36, 36, 8, 32, 32, 8, 16, 64, 128, 128, 32, 8, 32, 32, 16, 32, 24, 24, 24, 12, 8, 32, 48, 24, 80, 80, 8, 24, 96, 16, 8, 8, 24, 48, 16, 16, 80, 160, 16, 16, 64, 32, 64, 32, 16, 48, 12, 12, 72, 72, 12, 8, 32, 16, 12, 12, 36, 144, 32, 16, 64, 64, 16, 64, 96, 12, 8, 16, 16, 32, 32, 8, 48, 96, 8, 8, 32, 64, 32, 8, 24, 72, 24, 16, 64, 32, 8, 32, 80, 20, 16, 64, 64, 64, 16, 4, 24, 96, 48, 72, 48, 16, 32, 16, 16, 64, 32, 16, 48, 24, 8, 16, 96, 96, 16, 8, 8, 48, 24, 8, 96, 96, 24, 24, 32, 32, 48, 96, 48, 48, 32, 8, 32, 64, 8, 24, 96, 32, 32, 32, 32, 32, 16, 8, 48, 48, 8, 48, 48, 8, 8, 16, 80, 120, 24, 16, 32, 64, 32, 16, 24, 48, 96, 24, 16, 32, 8, 8, 128, 64, 4, 16, 96, 24, 8, 16, 24, 96, 64, 16, 48, 24, 16, 32, 56, 56, 16, 16, 16, 48, 48, 8, 48, 48, 4, 16, 96, 72, 60, 20, 16, 64, 32, 32, 64, 16, 4, 24, 72, 24, 32, 16, 32, 128, 16, 8, 120, 240, 16, 8, 16, 16, 48, 72, 72, 96, 16, 8, 32, 32, 8, 16, 128, 32, 24, 48, 16, 32, 32, 8, 24, 24, 16, 48, 48, 64, 64, 48, 72, 48, 8, 4, 32, 64, 16, 32, 96, 48, 16, 16, 16, 24, 24, 16, 64, 32, 8, 64, 128, 16, 12, 24, 72, 144, 16, 4, 16, 32, 16, 40, 200, 80, 32, 32, 16, 32, 16, 16, 144, 72, 16, 32, 64, 16, 24, 24, 16, 144, 36, 8, 64, 64, 16, 16, 24, 12, 16, 64, 64, 32, 16, 16, 64, 64, 16, 48, 48, 16, 16, 8, 24, 48, 48, 24, 24, 24, 8, 32, 64, 64, 32, 16, 32, 64, 16, 4, 48, 96, 8, 8, 16, 16, 48, 72, 60, 40, 16, 32, 64, 16, 8, 24, 72, 24, 8, 16, 16, 64, 64, 24, 192, 64, 8, 16, 32, 32, 32, 64, 48, 36, 12, 8, 96, 96, 8, 8, 48, 96, 96, 24, 8, 16, 32, 16, 24, 96, 32, 64, 128, 16, 8, 8, 32, 64, 16, 8, 24, 72, 24, 64, 96, 12, 16, 16, 8, 48, 48, 16, 80, 80, 16, 32, 64, 32, 32, 16, 24, 96, 16, 4, 32, 64, 24, 36, 96, 64, 16, 32, 64, 32, 8, 8, 144, 144, 16, 16, 16, 32, 32, 8, 28, 140, 40, 16, 32, 32, 8, 24, 144, 48, 48, 48, 32, 32, 16, 16, 64, 64, 8, 12, 24, 8, 32, 64, 24, 48, 16, 16, 128, 64, 8, 16, 160, 40, 16, 16, 16, 96, 24, 4, 24, 48, 16, 32, 64, 16, 12, 48, 64, 64, 48, 12, 32, 32, 4, 16, 48, 72, 96, 16, 16, 64, 64, 32, 144, 144, 8, 16, 32, 16, 16, 16, 48, 72, 24, 16, 32, 32, 16, 32, 128, 32, 20, 20, 8, 32, 16, 8, 48, 24, 4, 24, 192, 64, 16, 16, 40, 80, 32, 24, 72, 48, 32, 64, 48, 12, 16, 48, 24, 32, 16, 4, 64, 256, 32, 16, 16, 32, 48, 24, 48, 96, 32, 8, 32, 32, 8, 96, 432, 72, 16, 8, 24, 48, 16, 16, 96, 96, 8, 8, 32, 32, 32, 16, 16, 48, 36, 24, 64, 64, 16, 16, 48, 48, 24, 48, 32, 64, 32, 4, 40, 40, 16, 96, 48, 8, 16, 32, 48, 96, 16, 4, 48, 96, 16, 16, 64, 64, 16, 32, 64, 48, 36, 24, 48, 24, 8, 32, 32, 8, 32, 32, 48, 192, 16, 8, 32, 96, 24, 12, 36, 24, 32, 32, 32, 64, 16, 12, 144, 48, 4, 16, 128, 64, 32, 32, 24, 96, 128, 32, 32, 32, 16, 32, 80, 40, 24, 24, 16, 16, 8, 8, 96, 48, 8, 24, 24, 16, 16, 16, 32, 64, 32, 8, 40, 80, 24, 48, 96, 24, 16, 16, 16, 96, 24, 8, 112, 168, 12, 8, 32, 16, 24, 24, 12, 48, 32, 32, 64, 32, 16, 32, 128, 32, 16, 16, 8, 32, 32, 16, 72, 72, 32, 64, 32, 8, 8, 32, 160, 240, 24, 4, 32, 32, 4, 24, 144, 48, 32, 32, 32, 32, 32, 16, 32, 32, 4, 36, 72, 32, 64, 32, 48, 48, 8, 4, 48, 96, 8, 8, 48, 24, 16, 32, 32, 80, 40, 16, 48, 24, 8, 16, 48, 96, 48, 24, 32, 128, 32, 8, 32, 32, 16, 24, 108, 72, 16, 16, 32, 32, 16, 16, 120, 120, 8, 16, 64, 48, 48, 16, 12, 72, 48, 16, 32, 32, 16, 32, 64, 16, 12, 12, 32, 64, 16, 16, 48, 96, 32, 64, 64, 8, 24, 48, 64, 64, 16, 32, 96, 24, 4, 8, 48, 72, 24, 8, 8, 48, 48, 16, 128, 128, 32, 64, 32, 8, 24, 96, 48, 24, 16, 16, 64, 64, 16, 24, 60, 40, 32, 32, 16, 64, 64, 8, 36, 72, 16, 32, 64, 16, 8, 16, 96, 192, 32, 32, 64, 32, 8, 16, 96, 24, 24, 48, 16, 16, 8, 8, 96, 96, 8, 12, 96, 32, 16, 16, 24, 144, 24, 8, 64, 64, 16, 32, 64, 64, 32, 16, 16, 48, 48, 16, 96, 48, 4, 8, 32, 64, 96, 24, 20, 40, 24, 12, 32, 64, 16, 80, 120, 12, 8, 32, 64, 32, 16, 8, 48, 192, 64, 32, 16, 16, 32, 32, 48, 144, 24, 12, 48, 48, 12, 8, 56, 28, 16, 16, 16, 128, 32, 8, 96, 48, 8, 24, 24, 8, 16, 32, 32, 32, 16, 16, 96, 96, 8, 16, 48, 48, 32, 8, 24, 96, 64, 32, 80, 40, 8, 64, 64, 8, 12, 12, 24, 96, 32, 8, 32, 96, 24, 24, 48, 32, 32, 32, 32, 32, 8, 8, 120, 120, 8, 16, 64, 32, 16, 32, 96, 144, 24, 4, 16, 16, 24, 96, 48, 24, 48, 48, 32, 96, 48, 16, 128, 64, 4, 16, 64, 64, 32, 8, 12, 24, 16, 16, 48, 48, 8, 24, 120, 40, 32, 32, 32, 48, 24, 8, 24, 96, 16, 16, 64, 32, 64, 32, 32, 64, 8, 8, 32, 16, 12, 72, 216, 72, 32, 16, 8, 32, 48, 24, 72, 72, 16, 32, 32, 16, 16, 32, 48, 72, 24, 8, 128, 64, 4, 16, 64, 64, 48, 24, 32, 32, 16, 16, 48, 48, 16, 48, 96, 16, 8, 8, 40, 320, 64, 8, 32, 64, 16, 16, 48, 24, 24, 24, 8, 48, 48, 48, 192, 32, 8, 16, 32, 32, 48, 24, 24, 96, 16, 8, 32, 64, 32, 32, 96, 24, 16, 96, 96, 32, 8, 4, 72, 144, 8, 16, 32, 16, 32, 32, 32, 48, 48, 16, 32, 64, 8, 16, 48, 48, 80, 40, 48, 48, 8, 4, 40, 80, 16, 24, 48, 32, 32, 32, 48, 48, 8, 16, 96, 48, 16, 32, 128, 32, 8, 8, 8, 64, 64, 16, 48, 24, 16, 64, 64, 16, 12, 24, 56, 56, 16, 16, 64, 64, 8, 24, 72, 48, 64, 32, 16, 16, 32, 16, 64, 192, 12, 16, 64, 32, 32, 16, 48, 144, 12, 8, 32, 32, 8, 16, 80, 40, 48, 48, 16, 32, 64, 48, 72, 48, 8, 20, 80, 32, 16, 8, 32, 256, 32, 4, 48, 48, 8, 16, 24, 12, 16, 64, 64, 96, 24, 4, 48, 48, 12, 24, 16, 16, 32, 64, 48, 48, 64, 32, 32, 16, 8, 48, 192, 32, 16, 32, 32, 32, 8, 16, 144, 108, 24, 16, 32, 32, 64, 32, 20, 80, 16, 8, 64, 64, 16, 16, 48, 48, 24, 24, 32, 64, 16, 8, 64, 64, 24, 108, 72, 16, 16, 16, 24, 24, 16, 16, 80, 40, 16, 32, 64, 128, 32, 16, 16, 24, 24, 8, 48, 96, 8, 32, 128, 16, 12, 48, 128, 64, 8, 8, 64, 64, 16, 32, 96, 24, 16, 32, 16, 32, 16, 16, 240, 120, 16, 32, 96, 72, 48, 16, 12, 72, 48, 16, 32, 16, 8, 16, 32, 32, 64, 64, 16, 32, 16, 4, 48, 192, 32, 24, 24, 24, 24, 16, 96, 192, 64, 16, 24, 24, 4, 32, 96, 12, 8, 16, 64, 160, 40, 8, 32, 128, 16, 16, 32, 24, 108, 36, 12, 48, 16, 8, 64, 32, 8, 48, 240, 120, 24, 16, 32, 64, 32, 8, 48, 48, 16, 32, 32, 16, 8, 24, 48, 96, 48, 16, 64, 64, 16, 32, 96, 48, 24, 12, 16, 32, 16, 32, 224, 56, 8, 64, 64, 16, 48, 24, 36, 72, 16, 8, 24, 96, 16, 8, 32, 16, 16, 16, 16, 48, 24, 32, 192, 96, 16, 32, 64, 16, 20, 20, 20, 120, 48, 16, 32, 32, 16, 48, 144, 48, 16, 32, 32, 32, 32, 8, 48, 48, 4, 8, 32, 32, 16, 24, 36, 96, 96, 12, 16, 32, 16, 32, 96, 48, 24, 12, 32, 128, 16, 8, 48, 48, 16, 24, 48, 32, 32, 32, 32, 64, 32, 48, 192, 32, 4, 8, 48, 24, 16, 64, 64, 96, 24, 4, 40, 80, 16, 16, 32, 32, 24, 24, 72, 72, 8, 4, 48, 48, 4, 28, 224, 64, 32, 16, 8, 32, 64, 32, 72, 36, 4, 32, 64, 32, 32, 8, 40, 120, 24, 16, 64, 128, 32, 16, 24, 24, 64, 64, 16, 32, 32, 32, 128, 64, 16, 24, 48, 32, 16, 16, 24, 96, 64, 8, 24, 48, 24, 48, 160, 40, 8, 16, 16, 32, 16, 16, 192, 96, 16, 16, 16, 16, 48, 24, 16, 32, 32, 16, 16, 32, 16, 72, 108, 24, 16, 8, 32, 128, 16, 4, 72, 288, 16, 32, 64, 8, 16, 32, 48, 72, 36, 24, 32, 16, 8, 16, 96, 96, 24, 36, 24, 32, 32, 16, 96, 48, 8, 32, 32, 16, 32, 64, 80, 80, 16, 8, 96, 96, 16, 16, 24, 72, 96, 16, 8, 48, 48, 8, 32, 32, 4, 16, 128, 32, 16, 48, 72, 48, 8, 12, 96, 64, 16, 48, 168, 56, 48, 48, 32, 64, 32, 16, 72, 72, 16, 16, 32, 16, 8, 16, 64, 320, 40, 8, 32, 32, 32, 64, 48, 12, 12, 36, 24, 16, 32, 16, 80, 80, 8, 24, 24, 32, 32, 16, 24, 24, 16, 32, 128, 64, 8, 16, 64, 16, 8, 16, 48, 144, 48, 8, 48, 96, 16, 32, 32, 8, 24, 48, 48, 192, 32, 8, 32, 32, 8, 16, 192, 96, 16, 8, 16, 96, 24, 8, 96, 48, 16, 32, 32, 16, 16, 64, 96, 72, 24, 16, 64, 96, 12, 16, 80, 40, 48, 24, 16, 32, 24, 12, 24, 48, 8, 48, 192, 32, 32, 32, 64, 64, 16, 16, 48, 96, 16, 8, 48, 96, 64, 32, 32, 64, 16, 16, 256, 128, 8, 16, 64, 16, 24, 48, 24, 48, 16, 4, 16, 32, 48, 72, 48, 16, 8, 32, 64, 64, 16, 4, 48, 96, 16, 16, 32, 64, 64, 16, 20, 60, 24, 16, 64, 32, 4, 16, 48, 12, 24, 24, 16, 64, 16, 16, 128, 192, 24, 20, 80, 32, 32, 16, 24, 48, 32, 32, 48, 24, 4, 24, 288, 48, 8, 8, 8, 48, 48, 16, 48, 24, 12, 48, 64, 64, 64, 32, 64, 128, 16, 8, 128, 128, 8, 12, 36, 24, 16, 32, 32, 16, 16, 8, 60, 120, 32, 96, 48, 8, 16, 16, 24, 192, 32, 4, 16, 32, 16, 32, 128, 64, 48, 48, 16, 16, 16, 32, 96, 48, 8, 24, 192, 32, 16, 16, 28, 112, 16, 4, 40, 80, 32, 64, 96, 48, 16, 16, 32, 48, 24, 8, 64, 64, 8, 32, 32, 48, 72, 12, 12, 48, 64, 16, 16, 32, 8, 32, 160, 60, 48, 32, 32, 32, 16, 16, 144, 144, 16, 16, 32, 32, 48, 96, 64, 48, 12, 16, 64, 16, 8, 32, 96, 48, 32, 16, 16, 128, 96, 24, 96, 48, 8, 24, 48, 16, 8, 24, 72, 96, 16, 8, 96, 48, 4, 8, 32, 32, 48, 48, 32, 96, 96, 16, 24, 96, 16, 16, 32, 16, 24, 24, 80, 80, 8, 8, 32, 64, 16, 24, 72, 24, 64, 64, 32, 32, 16, 16, 128, 128, 8, 8, 32, 64, 32, 8, 24, 216, 72, 16, 64, 64, 16, 16, 72, 72, 24, 72, 48, 16, 8, 4, 48, 48, 16, 128, 128, 32, 16, 8, 16, 64, 48, 12, 24, 24, 8, 64, 192, 24, 16, 16, 16, 96, 48, 16, 80, 160, 16, 8, 32, 16, 20, 40, 24, 48, 16, 12, 96, 64, 16, 24, 96, 128, 32, 8, 24, 96, 16, 12, 108, 36, 8, 32, 32, 8, 16, 64, 96, 96, 64, 32, 96, 48, 4, 8, 48, 96, 48, 24, 16, 32, 32, 8, 64, 128, 8, 24, 48, 8, 8, 32, 96, 48, 8, 8, 64, 96, 24, 32, 80, 40, 32, 32, 16, 72, 72, 32, 96, 24, 8, 16, 64, 32, 24, 24, 16, 64, 48, 24, 32, 16, 16, 80, 60, 24, 32, 32, 16, 32, 16, 8, 112, 112, 16, 32, 64, 32, 16, 16, 48, 72, 24, 16, 64, 64, 8, 48, 192, 32, 32, 16, 16, 64, 48, 12, 24, 96, 32, 24, 24, 16, 32, 16, 20, 40, 8, 16, 192, 192, 32, 16, 72, 36, 8, 16, 16, 64, 32, 4, 32, 64, 32, 64, 32, 8, 12, 24, 24, 48, 16, 8, 64, 32, 8, 24, 144, 144, 24, 8, 16, 64, 64, 64, 240, 120, 8, 16, 32, 16, 32, 16, 32, 192, 48, 8, 16, 64, 32, 16, 48, 24, 36, 36, 32, 64, 8, 8, 80, 40, 8, 64, 128, 16, 8, 32, 48, 96, 64, 8, 24, 24, 8, 32, 64, 32, 32, 64, 64, 48, 12, 4, 48, 48, 8, 32, 32, 32, 64, 32, 64, 128, 64, 32, 32, 32, 16, 48, 144, 24, 8, 16, 48, 96, 32, 8, 48, 96, 8, 16, 64, 32, 32, 32, 24, 60, 20, 16, 128, 64, 16, 16, 80, 80, 48, 24, 8, 48, 24, 4, 48, 144, 24, 24, 24, 16, 32, 32, 64, 64, 8, 4, 64, 128, 8, 16, 48, 48, 32, 16, 16, 24, 72, 48, 96, 48, 8, 32, 32, 32, 48, 24, 48, 48, 16, 16, 64, 64, 16, 64, 128, 32, 32, 32, 16, 32, 32, 24, 108, 72, 24, 24, 64, 32, 8, 16, 80, 480, 96, 8, 16, 32, 16, 16, 48, 48, 40, 80, 32, 16, 8, 8, 128, 128, 8, 24, 96, 32, 32, 16, 12, 24, 16, 8, 24, 48, 16, 32, 112, 56, 32, 32, 64, 128, 16, 8, 48, 72, 24, 48, 96, 16, 24, 48, 64, 64, 16, 32, 64, 16, 4, 24, 144, 48, 32, 16, 8, 64, 32, 4, 80, 160, 24, 24, 32, 16, 8, 32, 48, 36, 24, 16, 64, 128, 32, 32, 64, 32, 24, 12, 16, 64, 32, 16, 96, 48, 4, 24, 144, 48, 16, 8, 48, 96, 8, 16, 96, 48, 16, 16, 24, 12, 32, 32, 8, 24, 24, 32, 128, 128, 16, 16, 96, 24, 16, 32, 48, 192, 64, 16, 32, 32, 32, 96, 120, 20, 8, 16, 32, 32, 32, 32, 144, 72, 4, 16, 32, 32, 32, 16, 32, 64, 32, 8, 32, 32, 4, 16, 96, 48, 48, 48, 32, 64, 32, 8, 40, 80, 16, 24, 48, 64, 96, 24, 12, 48, 32, 16, 80, 80, 8, 8, 128, 128, 32, 16, 16, 96, 24, 8, 48, 48, 16, 48, 48, 8, 24, 144, 120, 80, 16, 8, 64, 64, 16, 32, 48, 24, 16, 16, 64, 64, 16, 16, 96, 96, 16, 64, 64, 8, 8, 8, 36, 216, 48, 8, 32, 128, 32, 16, 48, 48, 64, 32, 8, 32, 32, 32, 192, 48, 4, 12, 48, 16, 16, 48, 48, 96, 48, 16, 48, 24, 16, 64, 96, 48, 16, 32, 32, 80, 40, 8, 160, 80, 4, 8, 32, 32, 24, 12, 24, 48, 32, 64, 64, 48, 24, 48, 192, 32, 16, 32, 32, 32, 16, 8, 48, 192, 32, 16, 16, 8, 32, 32, 28, 168, 24, 12, 48, 16, 8, 64, 192, 48, 24, 24, 16, 32, 32, 8, 32, 64, 32, 64, 64, 32, 16, 16, 24, 24, 16, 8, 48, 48, 8, 32, 80, 80, 32, 32, 64, 48, 24, 8, 24, 48, 32, 64, 32, 8, 24, 48, 64, 192, 48, 8, 32, 192, 24, 24, 144, 24, 16, 32, 16, 16, 8, 16, 288, 72, 4, 8, 32, 32, 32, 16, 24, 192, 64, 16, 32, 32, 24, 48, 64, 16, 12, 48, 64, 64, 32, 8, 48, 48, 4, 24, 96, 64, 32, 8, 20, 80, 96, 48, 64, 32, 4, 32, 96, 24, 16, 8, 32, 96, 12, 8, 128, 128, 16, 16, 16, 8, 24, 96, 96, 48, 16, 16, 64, 32, 8, 40, 160, 64, 32, 32, 16, 64, 32, 8, 72, 144, 32, 16, 32, 48, 24, 16, 32, 96, 24, 12, 96, 32, 12, 24, 48, 72, 96, 32, 8, 16, 16, 16, 80, 80, 8, 24, 48, 16, 32, 32, 96, 192, 16, 8, 48, 48, 16, 32, 128, 32, 24, 24, 8, 32, 32, 16, 48, 48, 8, 8, 32, 64, 48, 24, 48, 96, 32, 16, 96, 48, 8, 24, 36, 12, 16, 96, 48, 32, 32, 32, 256, 64, 8, 16, 16, 16, 32, 32, 24, 72, 96, 16, 16, 32, 16, 32, 160, 80, 24, 24, 64, 128, 16, 8, 48, 48, 8, 16, 32, 16, 64, 64, 64, 128, 16, 8, 48, 96, 16, 16, 96, 24, 8, 16, 32, 144, 72, 16, 112, 56, 8, 32, 64, 32, 32, 32, 48, 48, 16, 16, 64, 64, 8, 12, 48, 128, 64, 8, 8, 32, 48, 12, 72, 72, 8, 64, 128, 32, 16, 16, 80, 280, 56, 8, 16, 64, 48, 48, 48, 12, 24, 24, 16, 64, 32, 24, 96, 32, 16, 96, 192, 32, 8, 16, 24, 48, 32, 16, 64, 64, 16, 32, 96, 48, 32, 32, 32, 48, 12, 4, 72, 288, 16, 16, 64, 32, 24, 12, 32, 64, 16, 16, 64, 64, 8, 32, 96, 24, 16, 8, 16, 32, 32, 32, 120, 240, 16, 8, 16, 16, 64, 64, 24, 72, 48, 16, 64, 32, 4, 8, 64, 64, 40, 80, 64, 64, 16, 12, 72, 48, 48, 72, 24, 8, 8, 32, 144, 144, 16, 4, 48, 48, 4, 8, 72, 144, 64, 32, 16, 64, 128, 32, 64, 32, 8, 48, 48, 16, 48, 24, 24, 96, 32, 16, 32, 64, 16, 12, 120, 40, 16, 16, 16, 64, 16, 16, 192, 96, 16, 64, 192, 24, 8, 8, 16, 96, 48, 16, 64, 32, 16, 32, 24, 36, 36, 48, 64, 32, 8, 4, 48, 192, 16, 20, 40, 24, 48, 32, 24, 24, 16, 16, 96, 48, 16, 64, 64, 16, 8, 16, 32, 96, 24, 8, 48, 96, 16, 16, 64, 32, 64, 64, 40, 40, 16, 32, 64, 32, 16, 24, 72, 24, 24, 24, 16, 128, 64, 16, 96, 96, 16, 32, 32, 16, 16, 24, 72, 96, 16, 4, 32, 32, 4, 16, 112, 112, 96, 48, 16, 32, 64, 16, 24, 24, 8, 48, 48, 16, 32, 32, 96, 96, 16, 8, 48, 96, 16, 16, 48, 48, 32, 48, 48, 48, 12, 16, 160, 80, 16, 16, 64, 64, 24, 12, 12, 144, 48, 4, 16, 16, 8, 64, 256, 32, 16, 32, 16, 32, 32, 16, 144, 72, 8, 16, 32, 32, 32, 32, 48, 72, 36, 48, 64, 64, 32, 32, 48, 12, 16, 32, 64, 64, 16, 8, 32, 64, 8, 24, 96, 16, 16, 16, 12, 48, 32, 40, 120, 48, 16, 16, 80, 80, 32, 16, 8, 80, 80, 16, 96, 48, 16, 32, 16, 16, 24, 48, 64, 96, 24, 4, 48, 96, 32, 96, 72, 24, 16, 8, 16, 96, 48, 8, 64, 128, 8, 16, 128, 32, 8, 32, 96, 72, 12, 16, 64, 48, 12, 8, 32, 48, 144, 96, 16, 16, 8, 16, 96, 48, 8, 16, 64, 32, 32, 32, 80, 160, 32, 8, 24, 24, 12, 48, 96, 48, 32, 64, 64, 48, 36, 12, 64, 64, 4, 16, 32, 32, 80, 20, 24, 96, 64, 16, 32, 64, 16, 72, 216, 24, 8, 16, 32, 64, 16, 4, 36, 144, 32, 32, 32, 16, 32, 16, 32, 256, 64, 16, 64, 32, 4, 8, 72, 36, 12, 24, 32, 64, 32, 24, 120, 80, 16, 48, 48, 8, 16, 64, 48, 24, 24, 12, 64, 256, 16, 8, 32, 48, 24, 8, 16, 96, 96, 32, 48, 48, 8, 32, 64, 16, 48, 24, 56, 112, 16, 8, 16, 32, 16, 48, 72, 48, 96, 48, 16, 16, 8, 16, 192, 48, 4, 16, 64, 32, 32, 32, 24, 72, 24, 8, 64, 32, 16, 32, 80, 80, 32, 48, 48, 64, 16, 4, 48, 96, 8, 12, 96, 128, 32, 16, 32, 64, 32, 16, 48, 48, 8, 32, 96, 24, 32, 32, 48, 96, 32, 8, 48, 288, 48, 32, 32, 8, 24, 48, 48, 48, 8, 8, 32, 32, 8, 24, 192, 32, 8, 16, 32, 128, 64, 8, 60, 60, 16, 32, 16, 16, 32, 32, 40, 120, 48, 24, 192, 128, 8, 8, 48, 48, 24, 24, 16, 16, 24, 12, 32, 64, 24, 96, 64, 16, 16, 8, 24, 192, 32, 16, 96, 48, 8, 8, 80, 80, 32, 32, 32, 48, 24, 48, 288, 48, 8, 16, 32, 32, 64, 64, 32, 64, 16, 4, 16, 64, 32, 48, 72, 12, 16, 32, 32, 32, 8, 8, 120, 120, 16, 48, 48, 32, 32, 8, 24, 120, 80, 16, 16, 16, 4, 32, 256, 64, 24, 12, 16, 64, 32, 16, 96, 144, 12, 24, 96, 16, 16, 32, 48, 48, 8, 8, 64, 32, 16, 64, 96, 48, 32, 16, 8, 96, 48, 4, 32, 64, 32, 32, 48, 24, 24, 48, 24, 48, 32, 32, 128, 64, 8, 16, 80, 40, 32, 48, 48, 32, 16, 16, 72, 72, 8, 24, 96, 32, 16, 16, 128, 192, 24, 8, 16, 64, 16, 16, 48, 24, 48, 48, 16, 64, 64, 16, 112, 56, 8, 24, 72, 72, 24, 16, 48, 96, 32, 8, 48, 48, 16, 32, 32, 32, 32, 128, 128, 64, 16, 8, 96, 48, 8, 16, 16, 24, 72, 48, 40, 80, 32, 8, 32, 32, 8, 48, 144, 96, 32, 16, 32, 32, 8, 8, 128, 256, 16, 16, 64, 16, 24, 24, 12, 72, 24, 8, 32, 32, 16, 32, 192, 96, 24, 24, 32, 64, 32, 16, 48, 24, 16, 160, 160, 32, 16, 32, 64, 32, 32, 32, 96, 144, 12, 16, 96, 96, 32, 16, 16, 24, 24, 16, 160, 80, 4, 32, 64, 16, 32, 48, 108, 72, 8, 8, 32, 32, 16, 24, 48, 32, 64, 32, 16, 64, 32, 16, 72, 36, 4, 8, 64, 64, 16, 16, 64, 384, 96, 16, 32, 64, 32, 16, 24, 12, 24, 48, 32, 64, 16, 8, 128, 128, 8, 12, 24, 16, 32, 32, 72, 144, 48, 12, 40, 80, 8, 32, 160, 20, 16, 16, 16, 48, 48, 32, 48, 48, 8, 16, 32, 32, 96, 48, 32, 64, 32, 48, 192, 32, 4, 16, 192, 48, 16, 32, 16, 32, 32, 8, 72, 72, 16, 64, 32, 16, 16, 16, 24, 108, 72, 8, 48, 96, 24, 48, 128, 128, 64, 16, 8, 16, 16, 32, 96, 48, 16, 48, 48, 8, 16, 32, 80, 160, 16, 4, 48, 288, 48, 32, 48, 12, 16, 32, 32, 96, 24, 16, 128, 32, 4, 16, 128, 32, 12, 24, 48, 96, 64, 16, 32, 32, 12, 36, 84, 112, 32, 16, 16, 32, 16, 4, 48, 48, 8, 16, 32, 64, 64, 64, 128, 96, 24, 16, 32, 16, 8, 48, 72, 12, 12, 48, 64, 64, 32, 8, 40, 160, 16, 16, 64, 16, 32, 32, 24, 48, 8, 24, 144, 48, 16, 32, 192, 96, 32, 16, 8, 48, 24, 4, 24, 48, 16, 32, 64, 32, 40, 40, 96, 96, 16, 16, 64, 32, 8, 48, 72, 48, 64, 32, 16, 16, 32, 32, 96, 96, 16, 32, 64, 32, 32, 16, 24, 96, 16, 4, 48, 192, 16, 8, 40, 20, 36, 72, 16, 16, 16, 16, 96, 192, 32, 48, 96, 32, 16, 16, 32, 128, 32, 16, 128, 32, 16, 32, 48, 24, 8, 24, 48, 48, 24, 16, 72, 36, 8, 32, 64, 64, 96, 24, 12, 48, 32, 8, 16, 48, 12, 40, 320, 64, 16, 8, 48, 192, 16, 4, 36, 144, 16, 16, 64, 32, 32, 32, 40, 60, 48, 32, 32, 16, 8, 32, 96, 48, 32, 16, 8, 48, 24, 4, 64, 128, 16, 24, 24, 32, 32, 64, 96, 24, 16, 16, 96, 48, 12, 48, 96, 48, 16, 16, 32, 128, 128, 32, 48, 24, 4, 32, 128, 16, 12, 12, 32, 128, 16, 8, 32, 32, 16, 24, 36, 24, 64, 64, 32, 32, 24, 36, 240, 320, 16, 8, 32, 32, 16, 16, 48, 144, 48, 16, 64, 32, 16, 96, 96, 16, 12, 24, 16, 32, 32, 16, 144, 144, 16, 32, 32, 32, 32, 16, 56, 112, 64, 32, 96, 96, 8, 16, 48, 12, 8, 16, 64, 192, 24, 4, 32, 96, 48, 32, 32, 16, 32, 64, 48, 96, 16, 8, 32, 32, 8, 24, 240, 40, 8, 32, 64, 64, 16, 16, 144, 72, 24, 24, 32, 16, 32, 64, 32, 80, 20, 8, 64, 64, 8, 8, 24, 48, 96, 24, 16, 64, 32, 16, 96, 48, 8, 72, 144, 16, 16, 16, 24, 96, 32, 8, 32, 128, 16, 16, 128, 128, 64, 32, 16, 24, 12, 8, 96, 96, 16, 16, 48, 24, 12, 24, 80, 320, 64, 8, 16, 32, 32, 64, 96, 48, 16, 16, 16, 64, 64, 8, 96, 96, 8, 32, 64, 48, 24, 8, 12, 36, 48, 64, 64, 16, 4, 16, 128, 32, 20, 40, 32, 32, 16, 24, 72, 96, 32, 24, 24, 8, 24, 24, 32, 128, 32, 32, 192, 96, 16, 32, 96, 48, 16, 8, 16, 128, 64, 16, 80, 80, 16, 16, 16, 32, 48, 72, 72, 24, 8, 8, 128, 128, 16, 24, 48, 32, 32, 48, 24, 16, 32, 32, 96, 48, 8, 64, 64, 16, 32, 32, 96, 288, 24, 8, 64, 64, 8, 16, 96, 24, 24, 24, 8, 16, 8, 16, 128, 32, 8, 56, 112, 32, 32, 32, 48, 144, 24, 8, 48, 96, 64, 32, 40, 40, 32, 32, 48, 144, 24, 4, 48, 192, 16, 16, 32, 16, 32, 32, 32, 32, 48, 48, 64, 32, 4, 24, 144, 48, 32, 16, 32, 64, 16, 16, 168, 168, 16, 16, 16, 8, 16, 32, 24, 96, 64, 24, 48, 32, 16, 16, 64, 32, 12, 24, 32, 192, 96, 8, 24, 24, 8, 24, 48, 16, 16, 32, 80, 80, 8, 16, 160, 40, 4, 16, 48, 24, 32, 48, 24, 48, 48, 8, 32, 128, 16, 16, 32, 8, 24, 48, 96, 96, 16, 8, 16, 80, 40, 64, 192, 48, 32, 32, 32, 32, 24, 24, 72, 72, 16, 16, 64, 64, 32, 32, 32, 96, 24, 4, 32, 64, 24, 96, 96, 24, 32, 64, 32, 16, 8, 8, 160, 80, 16, 48, 48, 64, 32, 8, 12, 48, 64, 16, 24, 48, 16, 48, 192, 128, 64, 16, 16, 80, 20, 12, 144, 96, 8, 8, 32, 32, 96, 48, 40, 80, 16, 32, 64, 32, 8, 12, 108, 72, 16, 16, 32, 64, 32, 16, 128, 64, 8, 64, 64, 16, 16, 32, 96, 144, 48, 8, 32, 32, 4, 8, 40, 120, 72, 24, 48, 96, 32, 8, 48, 48, 8, 64, 128, 16, 8, 32, 128, 128, 32, 8, 24, 96, 64, 32, 24, 24, 64, 64, 16, 48, 24, 16, 192, 96, 8, 8, 64, 64, 48, 24, 12, 96, 32, 8, 64, 32, 8, 24, 96, 32, 16, 48, 24, 32, 16, 8, 144, 216, 24, 32, 64, 32, 16, 8, 40, 160, 32, 8, 16, 16, 16, 128, 192, 24, 12, 24, 48, 48, 16, 24, 96, 128, 16, 24, 96, 32, 32, 16, 12, 48, 16, 8, 128, 64, 4, 16, 224, 112, 32, 64, 32, 72, 72, 16, 48, 24, 24, 48, 16, 16, 24, 24, 32, 64, 32, 16, 64, 64, 16, 40, 120, 48, 32, 32, 16, 48, 72, 24, 120, 60, 4, 16, 32, 16, 32, 32, 96, 144, 24, 8, 32, 128, 32, 16, 32, 16, 32, 64, 64, 64, 16, 32, 96, 24, 8, 72, 144, 48, 48, 32, 48, 192, 64, 8, 24, 24, 8, 16, 24, 48, 32, 32, 32, 32, 32, 16, 128, 128, 8, 8, 32, 32, 24, 24, 24, 24, 16, 16, 32, 32, 16, 96, 240, 40, 32, 16, 16, 64, 16, 4, 60, 180, 24, 16, 48, 24, 16, 16, 32, 96, 12, 16, 128, 128, 16, 16, 96, 48, 48, 24, 8, 32, 32, 8, 64, 256, 48, 48, 32, 16, 16, 32, 96, 48, 8, 8, 96, 48, 4, 32, 128, 32, 32, 16, 16, 48, 48, 32, 48, 48, 16, 48, 96, 48, 48, 32, 80, 160, 16, 8, 64, 64, 8, 24, 72, 24, 32, 32, 32, 64, 32, 16, 96, 96, 16, 16, 64, 32, 16, 32, 24, 72, 24, 8, 32, 32, 32, 32, 96, 48, 24, 96, 32, 32, 16, 8, 96, 48, 4, 12, 24, 48, 144, 24, 32, 64, 16, 16, 64, 128, 32, 32, 96, 24, 8, 8, 32, 192, 24, 4, 40, 80, 8, 32, 64, 16, 72, 72, 24, 24, 32, 64, 128, 64, 16, 32, 128, 64, 16, 8, 8, 32, 16, 8, 144, 288, 32, 16, 16, 8, 8, 48, 168, 84, 12, 8, 64, 32, 8, 16, 48, 96, 80, 40, 32, 64, 32, 24, 96, 64, 8, 24, 96, 16, 8, 8, 36, 144, 64, 32, 48, 48, 16, 32, 80, 20, 32, 64, 16, 64, 64, 16, 48, 48, 16, 48, 96, 32, 24, 12, 48, 384, 64, 8, 16, 16, 8, 48, 144, 48, 16, 32, 64, 32, 16, 16, 144, 72, 8, 32, 32, 64, 128, 16, 24, 72, 36, 24, 64, 64, 8, 16, 64, 32, 48, 48, 32, 32, 16, 8, 24, 48, 16, 40, 80, 16, 16, 64, 80, 120, 24, 12, 72, 24, 4, 16, 192, 48, 8, 16, 32, 96, 48, 32, 128, 32, 16, 32, 32, 16, 32, 128, 48, 48, 16, 4, 48, 192, 32, 24, 108, 72, 16, 8, 16, 32, 32, 32, 72, 36, 4, 32, 64, 16, 16, 8, 32, 128, 48, 48, 64, 48, 12, 8, 24, 48, 96, 24, 16, 64, 32, 16, 160, 80, 8, 24, 96, 32, 16, 32, 24, 96, 32, 4, 48, 96, 32, 32, 32, 16, 8, 32, 64, 96, 48, 16, 96, 48, 8, 32, 64, 32, 24, 24, 48, 96, 32, 24, 96, 64, 16, 96, 144, 24, 64, 32, 16, 32, 8, 4, 48, 192, 32, 32, 64, 64, 64, 32, 48, 72, 12, 8, 32, 32, 16, 32, 240, 120, 32, 16, 16, 64, 64, 16, 24, 48, 16, 48, 48, 16, 32, 32, 64, 64, 8, 4, 48, 48, 8, 32, 48, 36, 24, 32, 32, 40, 40, 8, 56, 168, 24, 64, 64, 8, 12, 12, 48, 192, 16, 8, 64, 128, 16, 12, 96, 32, 24, 48, 16, 32, 32, 64, 384, 96, 16, 16, 32, 16, 16, 16, 20, 120, 96, 16, 16, 48, 24, 16, 24, 24, 48, 96, 64, 64, 32, 16, 128, 128, 8, 32, 64, 16, 16, 8, 24, 48, 32, 32, 96, 48, 4, 16, 96, 96, 32, 16, 48, 144, 24, 8, 96, 192, 32, 16, 32, 32, 80, 160, 64, 32, 8, 8, 32, 32, 32, 48, 72, 48, 16, 8, 16, 192, 48, 8, 120, 60, 16, 64, 128, 32, 8, 16, 24, 48, 32, 16, 64, 32, 8, 32, 128, 64, 48, 48, 16, 32, 48, 12, 24, 48, 24, 72, 48, 24, 24, 24, 96, 128, 16, 4, 32, 128, 16, 24, 144, 24, 32, 32, 8, 24, 24, 24, 192, 128, 8, 16, 64, 32, 24, 24, 24, 48, 16, 16, 128, 64, 16, 48, 120, 40, 16, 32, 64, 32, 16, 8, 72, 72, 8, 16, 16, 16, 32, 16, 16, 96, 96, 16, 16, 16, 4, 16, 144, 72, 32, 32, 64, 128, 32, 16, 96, 144, 12, 24, 96, 16, 32, 64, 24, 24, 8, 16, 96, 48, 8, 16, 128, 32, 16, 16, 16, 128, 32, 8, 96, 48, 12, 48, 64, 32, 24, 24, 40, 40, 16, 8, 32, 128, 32, 48, 144, 144, 48, 8, 8, 16, 16, 16, 160, 160, 16, 48, 48, 16, 32, 32, 48, 72, 24, 16, 32, 64, 64, 64, 112, 56, 48, 24, 8, 32, 16, 16, 96, 48, 8, 16, 192, 96, 32, 16, 16, 64, 32, 16, 96, 48, 8, 16, 48, 48, 48, 48, 32, 48, 24, 16, 160, 160, 8, 8, 16, 32, 64, 16, 24, 96, 64, 32, 32, 16, 4, 48, 192, 16, 8, 32, 64, 64, 32, 16, 72, 144, 32, 16, 16, 16, 48, 24, 24, 120, 40, 16, 64, 32, 8, 32, 96, 24, 12, 72, 96, 128, 32, 8, 64, 64, 32, 48, 24, 8, 16, 48, 72, 192, 64, 16, 128, 64, 4, 8, 80, 160, 32, 8, 8, 24, 24, 32, 96, 48, 8, 16, 96, 48, 48, 24, 48, 96, 16, 8, 32, 128, 16, 32, 96, 12, 16, 32, 48, 96, 32, 32, 160, 80, 16, 32, 64, 16, 16, 32, 24, 108, 72, 8, 16, 32, 32, 64, 64, 32, 48, 48, 16, 16, 16, 8, 96, 96, 4, 24, 48, 16, 32, 32, 40, 40, 32, 32, 48, 48, 16, 32, 96, 24, 8, 16, 32, 128, 64, 16, 64, 128, 32, 16, 32, 64, 96, 48, 48, 96, 16, 24, 96, 16, 4, 12, 144, 48, 32, 32, 16, 64, 16, 8, 96, 96, 16, 32, 64, 16, 8, 32, 128, 96, 12, 8, 96, 96, 8, 16, 48, 24, 48, 48, 32, 64, 96, 24, 40, 80, 8, 40, 160, 64, 32, 8, 24, 96, 32, 8, 48, 144, 12, 8, 64, 64, 32, 64, 32, 48, 48, 16, 48, 24, 16, 64, 64, 16, 16, 16, 28, 224, 32, 8, 64, 32, 24, 72, 72, 48, 16, 16, 16, 16, 8, 12, 288, 384, 32, 16, 16, 16, 32, 64, 48, 48, 32, 8, 32, 128, 32, 64, 160, 20, 12, 24, 64, 128, 16, 8, 96, 96, 16, 48, 48, 16, 32, 16, 16, 64, 64, 32, 80, 40, 8, 32, 144, 144, 32, 8, 8, 96, 48, 8, 96, 48, 8, 16, 32, 16, 12, 48, 96, 96, 32, 8, 32, 32, 8, 32, 128, 192, 48, 16, 16, 32, 64, 16, 36, 36, 8, 64, 128, 16, 16, 16, 40, 120, 12, 16, 64, 32, 8, 16, 48, 24, 64, 64, 32, 64, 32, 32, 128, 96, 12, 12, 96, 32, 16, 16, 24, 96, 16, 4, 24, 48, 16, 64, 256, 32, 8, 24, 48, 112, 56, 8, 48, 96, 16, 32, 32, 32, 96, 48, 32, 32, 32, 16, 32, 64, 16, 48, 72, 12, 8, 32, 128, 64, 8, 16, 320, 160, 24, 24, 16, 16, 32, 16, 24, 144, 48, 32, 128, 64, 8, 16, 256, 64, 12, 24, 16, 48, 48, 16, 48, 48, 16, 32, 32, 8, 16, 32, 48, 96, 32, 8, 48, 192, 32, 16, 24, 48, 64, 16, 32, 96, 36, 12, 32, 64, 16, 96, 96, 16, 40, 60, 72, 48, 16, 16, 32, 32, 8, 12, 120, 80, 64, 64, 16, 16, 8, 12, 216, 144, 8, 16, 64, 64, 32, 16, 32, 128, 32, 4, 32, 64, 32, 64, 96, 48, 48, 96, 32, 32, 16, 8, 112, 56, 4, 24, 144, 96, 32, 16, 24, 24, 16, 16, 64, 32, 16, 64, 64, 32, 32, 16, 32, 96, 24, 8, 24, 192, 32, 8, 32, 16, 24, 24, 40, 240, 24, 16, 128, 64, 16, 80, 240, 48, 16, 8, 8, 32, 64, 32, 96, 48, 12, 24, 32, 48, 24, 16, 48, 144, 48, 16, 128, 64, 4, 8, 48, 48, 32, 32, 16, 32, 32, 16, 96, 96, 16, 72, 144, 16, 8, 8, 32, 128, 32, 16, 48, 96, 32, 16, 48, 24, 16, 32, 16, 32, 32, 32, 160, 40, 8, 32, 96, 48, 72, 72, 24, 48, 32, 16, 32, 64, 32, 48, 96, 32, 16, 32, 64, 64, 32, 8, 60, 60, 4, 16, 128, 96, 24, 16, 72, 216, 96, 32, 32, 16, 8, 64, 96, 48, 48, 12, 16, 64, 16, 4, 64, 128, 16, 32, 32, 8, 32, 96, 72, 48, 8, 8, 48, 48, 32, 32, 80, 80, 16, 16, 16, 96, 96, 8, 48, 48, 8, 16, 32, 32, 32, 96, 192, 64, 8, 16, 128, 32, 8, 24, 36, 48, 64, 16, 8, 32, 64, 16, 72, 144, 16, 32, 64, 32, 32, 32, 72, 180, 60, 12, 32, 128, 16, 16, 64, 32, 48, 24, 16, 32, 16, 32, 96, 24, 4, 12, 48, 64, 32, 32, 80, 120, 48, 16, 128, 64, 8, 32, 48, 12, 16, 64, 32, 24, 12, 4, 64, 128, 32, 64, 64, 64, 48, 24, 24, 72, 72, 12, 16, 32, 16, 64, 448, 56, 16, 16, 32, 128, 16, 8, 72, 72, 8, 32, 64, 16, 64, 32, 16, 48, 12, 16, 64, 64, 32, 32, 192, 96, 40, 20, 16, 64, 16, 4, 40, 80, 32, 96, 48, 16, 32, 32, 24, 24, 24, 24, 144, 72, 4, 8, 32, 64, 64, 16, 8, 32, 32, 32, 192, 96, 8, 16, 64, 32, 48, 96, 192, 96, 24, 12, 16, 48, 24, 24, 72, 24, 16, 16, 16, 128, 32, 8, 128, 128, 8, 8, 64, 32, 8, 16, 48, 288, 48, 16, 64, 16, 12, 48, 80, 40, 48, 96, 64, 32, 16, 16, 96, 96, 16, 48, 96, 32, 32, 16, 32, 64, 16, 24, 72, 24, 4, 48, 288, 48, 16, 16, 32, 48, 48, 32, 128, 128, 8, 8, 32, 32, 64, 64, 24, 24, 16, 16, 96, 96, 8, 24, 288, 96, 16, 16, 32, 128, 32, 4, 36, 36, 16, 64, 32, 32, 32, 16, 40, 160, 32, 8, 64, 64, 8, 16, 96, 72, 36, 24, 32, 32, 32, 32, 128, 128, 16, 48, 96, 16, 16, 16, 24, 48, 8, 12, 120, 240, 24, 16, 96, 48, 48, 48, 32, 48, 24, 16, 48, 48, 16, 32, 64, 16, 24, 48, 64, 256, 64, 8, 16, 16, 16, 64, 48, 24, 32, 96, 96, 32, 8, 4, 60, 120, 8, 8, 16, 16, 16, 32, 96, 144, 48, 8, 16, 16, 12, 48, 64, 32, 64, 32, 24, 192, 32, 4, 24, 96, 32, 24, 48, 32, 32, 16, 28, 56, 16, 32, 96, 48, 8, 8, 96, 96, 32, 32, 16, 80, 80, 32, 128, 64, 16, 32, 64, 16, 12, 24, 48, 96, 32, 8, 32, 32, 8, 72, 180, 40, 32, 32, 32, 64, 96, 24, 48, 192, 16, 16, 32, 16, 16, 8, 32, 96, 12, 4, 32, 128, 64, 32, 48, 24, 24, 48, 16, 16, 8, 24, 288, 48, 8, 64, 128, 16, 8, 16, 48, 192, 64, 16, 48, 48, 16, 32, 192, 48, 8, 16, 16, 48, 24, 16, 288, 72, 4, 16, 32, 32, 112, 56, 80, 160, 32, 8, 32, 64, 8, 24, 72, 24, 32, 32, 64, 64, 16, 8, 48, 144, 12, 16, 32, 16, 64, 64, 24, 48, 64, 64, 64, 32, 8, 8, 88, 264, 72, 12, 16, 64, 32, 8, 48, 96, 32, 96, 96, 16, 8, 32, 64, 64, 32, 8, 64, 128, 16, 32, 48, 24, 32, 16, 16, 96, 96, 16, 40, 40, 8, 48, 96, 32, 24, 24, 48, 96, 32, 32, 64, 96, 48, 40, 80, 16, 32, 64, 32, 64, 16, 16, 144, 72, 16, 16, 48, 24, 16, 16, 48, 288, 24, 8, 32, 48, 24, 32, 48, 12, 16, 32, 16, 32, 64, 32, 128, 64, 8, 48, 96, 96, 48, 16, 24, 48, 32, 8, 48, 48, 4, 32, 160, 20, 8, 24, 96, 128, 16, 4, 24, 48, 16, 16, 32, 32, 72, 72, 32, 128, 64, 32, 64, 16, 4, 12, 144, 96, 32, 32, 16, 32, 16, 8, 168, 84, 16, 32, 16, 32, 128, 128, 48, 36, 12, 8, 64, 64, 16, 16, 64, 128, 48, 48, 96, 48, 16, 8, 24, 48, 8, 64, 256, 32, 16, 8, 60, 120, 16, 8, 24, 48, 24, 24, 24, 24, 32, 32, 32, 96, 48, 16, 128, 128, 8, 16, 64, 32, 32, 32, 24, 72, 48, 8, 32, 32, 16, 96, 144, 24, 16, 32, 16, 48, 48, 32, 288, 144, 16, 16, 32, 32, 16, 16, 32, 96, 144, 48, 64, 32, 4, 32, 96, 12, 24, 24, 16, 64, 16, 4, 40, 320, 32, 12, 24, 24, 48, 32, 96, 96, 8, 12, 96, 32, 12, 48, 128, 64, 16, 16, 16, 48, 72, 12, 48, 96, 16, 32, 64, 32, 48, 48, 64, 64, 16, 8, 48, 48, 8, 32, 96, 96, 64, 64, 64, 64, 32, 16, 96, 48, 8, 32, 64, 32, 16, 16, 48, 144, 24, 8, 32, 48, 24, 48, 240, 40, 40, 40, 8, 16, 16, 48, 144, 48, 16, 24, 96, 64, 32, 32, 32, 128, 32, 8, 48, 96, 48, 24, 24, 24, 16, 16, 64, 256, 32, 4, 96, 192, 8, 16, 64, 32, 24, 12, 12, 48, 64, 32, 32, 32, 16, 72, 144, 32, 16, 16, 32, 32, 32, 32, 96, 192, 32, 16, 16, 8, 16, 64, 80, 120, 24, 16, 64, 16, 8, 16, 72, 36, 24, 48, 32, 128, 32, 4, 64, 64, 8, 40, 80, 16, 16, 64, 48, 24, 8, 16, 192, 192, 32, 16, 56, 140, 160, 32, 8, 24, 24, 8, 24, 96, 32, 32, 32, 16, 32, 16, 64, 128, 16, 16, 32, 32, 8, 24, 144, 48, 48, 24, 8, 32, 32, 16, 120, 60, 4, 16, 128, 64, 16, 8, 24, 192, 32, 4, 32, 64, 32, 32, 64, 64, 24, 72, 96, 32, 16, 16, 96, 96, 24, 36, 24, 16, 32, 16, 24, 96, 32, 8, 48, 144, 12, 32, 192, 48, 16, 16, 48, 144, 24, 16, 128, 64, 16, 32, 32, 8, 48, 48, 24, 48, 16, 16, 64, 64, 16, 32, 160, 80, 16, 8, 16, 96, 48, 16, 72, 36, 16, 96, 48, 8, 8, 32, 128, 96, 48, 16, 32, 64, 16, 16, 48, 96, 64, 32, 16, 16, 32, 32, 144, 72, 8, 48, 48, 16, 32, 64, 96, 96, 16, 8, 96, 96, 16, 32, 64, 48, 48, 16, 8, 80, 40, 12, 72, 48, 16, 16, 96, 48, 12, 24, 40, 80, 16, 16, 64, 16, 16, 96, 144, 48, 32, 64, 32, 16, 8, 4, 64, 128, 16, 32, 64, 32, 16, 16, 48, 72, 48, 32, 64, 64, 8, 32, 192, 48, 24, 24, 32, 32, 16, 16, 96, 144, 12, 16, 32, 48, 96, 16, 16, 64, 16, 16, 192, 48, 4, 8, 48, 48, 32, 32, 16, 48, 96, 16, 40, 80, 48, 48, 16, 8, 20, 80, 96, 192, 64, 8, 32, 32, 4, 24, 192, 128, 32, 8, 32, 64, 16, 16, 72, 72, 8, 32, 64, 16, 48, 96, 224, 448, 32, 4, 16, 64, 16, 16, 48, 12, 24, 24, 16, 32, 16, 16, 64, 64, 8, 24, 144, 48, 32, 16, 24, 96, 64, 32, 64, 32, 8, 16, 80, 80, 32, 64, 32, 24, 24, 16, 192, 192, 16, 32, 32, 48, 72, 36, 48, 32, 16, 16, 32, 32, 32, 112, 84, 12, 8, 8, 16, 64, 16, 8, 144, 288, 32, 32, 128, 32, 24, 48, 24, 36, 12, 16, 128, 32, 4, 16, 128, 64, 64, 64, 16, 64, 32, 8, 48, 48, 16, 48, 96, 16, 16, 48, 120, 80, 16, 8, 48, 96, 16, 32, 48, 48, 32, 8, 16, 128, 128, 32, 64, 32, 8, 32, 32, 16, 48, 48, 96, 192, 16, 4, 32, 128, 16, 12, 96, 64, 32, 64, 32, 16, 8, 8, 120, 120, 16, 16, 64, 64, 32, 32, 64, 288, 72, 8, 16, 32, 16, 16, 48, 96, 48, 24, 32, 64, 16, 16, 320, 160, 8, 16, 64, 32, 32, 16, 12, 48, 96, 48, 48, 48, 8, 32, 128, 16, 16, 16, 32, 96, 12, 16, 96, 48, 16, 64, 64, 8, 32, 32, 24, 48, 24, 36, 96, 128, 32, 24, 72, 48, 16, 8, 16, 64, 32, 8, 96, 192, 16, 16, 32, 16, 8, 32, 96, 120, 40, 16, 96, 96, 32, 32, 40, 40, 24, 24, 16, 32, 64, 32, 48, 24, 4, 48, 192, 16, 16, 16, 32, 128, 32, 24, 96, 128, 16, 8, 48, 48, 64, 32, 24, 72, 24, 32, 224, 224, 16, 16, 64, 32, 24, 24, 48, 96, 16, 8, 32, 16, 12, 96, 256, 64, 32, 64, 32, 16, 16, 8, 72, 72, 4, 8, 16, 64, 64, 16, 40, 120, 48, 8, 48, 48, 8, 48, 144, 24, 24, 48, 64, 64, 8, 8, 64, 64, 32, 96, 48, 16, 32, 48, 36, 96, 64, 16, 48, 24, 8, 16, 96, 96, 16, 16, 16, 64, 64, 16, 48, 48, 32, 64, 32, 8, 24, 48, 32, 32, 16, 16, 128, 192, 24, 48, 144, 72, 24, 16, 32, 64, 32, 16, 160, 160, 16, 64, 64, 16, 16, 8, 24, 72, 48, 16, 16, 64, 16, 16, 128, 64, 72, 36, 16, 96, 48, 16, 96, 48, 8, 40, 80, 16, 8, 16, 80, 160, 32, 16, 48, 48, 48, 96, 48, 12, 8, 48, 48, 48, 24, 4, 64, 128, 8, 8, 64, 128, 128, 32, 24, 96, 32, 16, 32, 32, 8, 24, 120, 80, 64, 16, 24, 48, 8, 8, 72, 144, 16, 8, 32, 32, 64, 32, 32, 128, 16, 16, 128, 32, 4, 32, 192, 24, 24, 72, 48, 96, 48, 16, 96, 48, 16, 48, 24, 16, 16, 16, 48, 48, 8, 16, 160, 80, 16, 32, 64, 32, 32, 32, 16, 48, 72, 12, 48, 48, 8, 32, 64, 32, 24, 24, 80, 160, 64, 32, 32, 32, 8, 16, 144, 36, 16, 32, 16, 32, 48, 96, 384, 96, 8, 8, 32, 32, 32, 16, 12, 144, 48, 8, 64, 64, 32, 32, 56, 28, 16, 64, 128, 128, 32, 8, 72, 144, 8, 24, 48, 16, 16, 32, 128, 64, 32, 16, 24, 48, 16, 32, 48, 36, 48, 32, 32, 96, 24, 4, 80, 240, 24, 32, 32, 16, 48, 96, 48, 48, 16, 8, 32, 16, 16, 96, 192, 64, 16, 8, 8, 64, 64, 8, 48, 48, 12, 48, 64, 32, 32, 64, 96, 144, 48, 16, 64, 64, 16, 16, 24, 24, 72, 36, 16, 32, 32, 16, 32, 128, 16, 48, 192, 32, 16, 16, 96, 192, 16, 4, 48, 96, 8, 16, 80, 20, 16, 16, 24, 72, 24, 48, 144, 24, 4, 8, 64, 128, 80, 20, 16, 128, 64, 16, 64, 64, 16, 24, 36, 24, 32, 96, 48, 32, 32, 8, 64, 128, 16, 32, 64, 48, 48, 16, 24, 192, 64, 16, 32, 32, 16, 32, 128, 64, 24, 24, 32, 32, 16, 32, 192, 96, 16, 24, 24, 8, 48, 48, 20, 40, 16, 16, 64, 128, 16, 8, 48, 48, 32, 32, 48, 144, 24, 8, 64, 64, 32, 128, 128, 32, 24, 36, 36, 48, 32, 8, 32, 64, 8, 20, 120, 96, 32, 8, 8, 16, 32, 32, 144, 72, 16, 64, 64, 16, 8, 16, 96, 144, 12, 8, 32, 64, 32, 32, 48, 48, 128, 64, 16, 48, 24, 16, 160, 40, 8, 24, 96, 32, 16, 32, 24, 96, 32, 16, 96, 48, 16, 16, 32, 16, 16, 64, 32, 32, 32, 16, 96, 96, 8, 8, 32, 64, 48, 24, 112, 224, 48, 24, 32, 32, 8, 48, 288, 24, 16, 32, 64, 192, 96, 16, 80, 160, 16, 16, 16, 16, 32, 32, 24, 36, 24, 24, 96, 32, 4, 16, 160, 40, 24, 48, 32, 128, 32, 8, 48, 24, 16, 64, 64, 32, 16, 16, 64, 128, 16, 4, 72, 72, 4, 16, 192, 96, 16, 16, 16, 24, 24, 24, 144, 192, 16, 32, 128, 16, 32, 32, 24, 48, 8, 8, 32, 96, 96, 48, 48, 32, 64, 32, 16, 32, 8, 8, 72, 108, 12, 32, 128, 32, 32, 16, 20, 200, 80, 16, 64, 64, 32, 32, 48, 96, 48, 24, 16, 16, 8, 8, 128, 128, 8, 12, 48, 64, 64, 32, 24, 24, 32, 32, 64, 64, 16, 48, 216, 36, 16, 16, 32, 384, 96, 8, 24, 48, 16, 16, 32, 16, 24, 48, 64, 64, 8, 16, 64, 32, 16, 64, 288, 36, 16, 64, 64, 64, 16, 4, 60, 180, 24, 32, 32, 8, 16, 64, 96, 144, 48, 16, 64, 32, 8, 32, 64, 96, 120, 20, 8, 16, 32, 16, 48, 48, 8, 48, 96, 64, 32, 8, 48, 96, 16, 16, 96, 192, 16, 16, 48, 36, 72, 48, 16, 32, 16, 8, 128, 128, 24, 48, 64, 32, 24, 12, 12, 96, 64, 8, 32, 128, 32, 24, 120, 80, 16, 40, 40, 32, 16, 8, 192, 96, 8, 32, 32, 16, 32, 16, 16, 48, 48, 64, 64, 32, 16, 64, 96, 12, 12, 24, 96, 96, 16, 8, 56, 112, 8, 24, 96, 16, 16, 32, 24, 48, 64, 32, 48, 48, 16, 32, 128, 128, 32, 8, 16, 144, 72, 8, 48, 96, 16, 32, 64, 16, 32, 256, 160, 80, 32, 8, 32, 32, 8, 24, 36, 24, 32, 32, 32, 64, 48, 48, 192, 48, 8, 32, 96, 48, 16, 8, 48, 192, 16, 8, 32, 32, 16, 16, 96, 48, 48, 48, 16, 64, 16, 12, 72, 96, 32, 48, 96, 16, 8, 16, 64, 256, 64, 8, 40, 80, 32, 64, 48, 24, 16, 16, 16, 48, 48, 24, 240, 160, 16, 16, 16, 48, 144, 24, 24, 48, 16, 8, 32, 64, 8, 32, 128, 32, 16, 32, 64, 32, 8, 8, 72, 216, 48, 32, 64, 32, 32, 32, 64, 192, 48, 32, 128, 32, 8, 16, 96, 48, 16, 16, 8, 64, 64, 16, 64, 32, 12, 72, 96, 32, 48, 48, 48, 48, 8, 8, 96, 96, 16, 16, 80, 160, 32, 16, 32, 80, 80, 16, 24, 24, 4, 48, 96, 16, 48, 48, 64, 64, 16, 16, 64, 64, 8, 24, 72, 48, 128, 64, 16, 32, 16, 16, 384, 96, 8, 32, 96, 24, 8, 48, 144, 144, 24, 4, 16, 16, 16, 64, 64, 16, 12, 24, 32, 64, 32, 8, 48, 192, 64, 64, 64, 64, 64, 32, 40, 80, 32, 16, 48, 48, 8, 16, 96, 48, 32, 32, 32, 96, 48, 8, 64, 256, 16, 8, 16, 8, 24, 48, 72, 72, 16, 64, 128, 16, 4, 24, 336, 56, 8, 8, 8, 32, 64, 32, 72, 72, 16, 16, 32, 64, 32, 24, 48, 128, 32, 8, 128, 128, 8, 16, 48, 24, 24, 24, 32, 64, 64, 32, 80, 80, 32, 96, 48, 8, 16, 32, 72, 216, 24, 4, 32, 64, 16, 32, 128, 64, 64, 32, 16, 96, 48, 32, 96, 48, 16, 16, 64, 96, 72, 48, 48, 144, 24, 4, 16, 32, 16, 40, 120, 48, 16, 16, 64, 64, 16, 8, 96, 96, 4, 32, 64, 32, 64, 32, 24, 36, 48, 16, 16, 16, 8, 64, 160, 80, 64, 64, 64, 64, 16, 4, 48, 192, 16, 24, 48, 8, 16, 32, 64, 64, 16, 24, 144, 48, 8, 16, 48, 24, 16, 32, 32, 256, 64, 8, 88, 44, 8, 32, 64, 32, 24, 24, 48, 48, 32, 48, 144, 48, 4, 12, 48, 64, 64, 32, 32, 64, 32, 16, 120, 120, 16, 32, 32, 16, 16, 16, 160, 240, 24, 8, 32, 192, 24, 16, 96, 24, 24, 96, 32, 16, 16, 16, 64, 96, 24, 32, 64, 32, 48, 24, 12, 48, 16, 4, 48, 96, 48, 96, 96, 48, 32, 64, 32, 24, 24, 16, 96, 96, 16, 32, 64, 32, 32, 32, 32, 128, 64, 16, 32, 16, 8, 96, 576]
Eccolo qua... ma non mi pare ci sia un ordine particolare :| (l'ho messo minuscolo altrimenti occupava troppo spazio)
Avatar utente
Haile
Messaggi: 515
Iscritto il: 30 mag 2008, 14:29
Località: Bergamo

Messaggio da Haile »

@dario: posteresti il tuo codice? Magari anche a parole, visto che di JS non so molto... comunque pyton è considerato uno dei più lenti per queste cose. Sul sito del progetto, dopo che hai dato un risultato corretto, puoi accedere ai commenti di chi l'ha già risolto ed ho visto che, per gli utilizzatori di python, i tempi di esecuzione non andavano molto sotto i 10 secondi... con PC da 2 gHz
SkZ ha scritto:qual e' l'andamento del numero di divisori dei numeri triangolari?
Per $ $\tfrac{n(n+1)}{2}$ $ con n = 1,2,3... la sequenza dei numeri di divisori è

Codice: Seleziona tutto

1 2 4 4 4 4 6 9 6 4 8 8 4 8 16 8 6 6 8 16 8 4 12 18 6 8 16 8 8 8 10 20 8 8 24 12 4 8 24 12 8 8 8 24 12 4 16 24 9 12 16 8 8 16 24 24 8 4 16 16 4 12 36 24 16 8 8 16 16 8 18 18 4 12 24 16 16 8 16 40 10 4 16 32 8 8 24 12 12 24 16 16 8 8 40 20 6 18 36
Ultima modifica di Haile il 23 giu 2009, 21:17, modificato 1 volta in totale.
[i]
Mathematical proofs are like diamonds: hard and clear.

[/i]
Avatar utente
Haile
Messaggi: 515
Iscritto il: 30 mag 2008, 14:29
Località: Bergamo

Messaggio da Haile »

@dario:

Credo che il tuo programma necessiti di una bella debuggata:

[2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 16, 8, 4, 8, 8, 4, 8, 16, 8, 4, 4, 8...

L'ottavo numero triangolare è 36 (8*9/2) ed ha 9 divisori.. tu ne segni 4
[i]
Mathematical proofs are like diamonds: hard and clear.

[/i]
dario2994
Messaggi: 1428
Iscritto il: 10 dic 2008, 21:30

Messaggio da dario2994 »

Si ma per spiegarti js non è neppure un linguaggio eseguibile, lo compila il browser, e non gli dedica mai più del 50% della CPU... comunque eccovi il codice, in python vi assicuro che potete arrivare sotto i 200ms senza problemi ;)
Ecco il codice (commentato un minimo xD)

Codice: Seleziona tutto

<script>
/*Questa funzione trova tutti i primi fino al numero limit; per farlo usa una versione ottimizzata del crivello di Erastotene*/
Math.primes=function(limit)

{
	var primi = new Array(2,3);
	for(var i=2;primi[i-1]<limit;i++)
	{
		for(var h=primi[primi.length-1]+2;h;h+=2)
		{
			for(var j=1;j<primi.length;j++)
			{
				if(h%primi[j])continue;
				break;
			}
			if(j==primi.length){primi.push(h);break;}
		}
	}
	return(primi);
}
/*Questa funzione calcola il numero di divisori del numero passato (lo fattorizza)*/
Math.divisors=function(n)
{
	var div=1;
	var m=0;
	for(var i=0;primes[i]<Math.floor(Math.pow(n,1/2));i++)
	{
		if(n%primes[i]){div*=(m+1);m=0;continue;}
		m++;
		n/=primes[i];
		i--;
		if(n==1)break;
	}
	if(n==primes[i]){div*=(m+2);}
	else if(n!=1){div*=2*(m+1);}
	else{div*=(m+1);}
	return(div)
}
/*Questa funzione prova tutti i numeri triangolari fino a quello espresso come n(n+1)/2 e restituisce (se presente) il primo con 500 divisori*/
Math.euler=function(n)
{
	primes=Math.primes(Math.floor(Math.pow(n+1,1/2)));
	for(i=2;i<n>500){return(i*(i+1)/2)}
		else if((i+1)%2&&Math.divisors(i/2)*Math.divisors(i+1)>500){return(i*(i+1)/2)}
	}
	return(false);
}
</script>
Se volete provarlo basta salvate in HTML un file così, lo aprite col browser e nella barra degli indirizzi scrivete:
javascript:alert(Math.euler(15000))
e cliccate invio ;) nel giro di un attimo vi comparirà il numero cercato ;)

EDIT:uhm... mi sa che ho fatto un errorino nella funzione che trova i divisori... tento di correggere :)
Avatar utente
Haile
Messaggi: 515
Iscritto il: 30 mag 2008, 14:29
Località: Bergamo

Messaggio da Haile »

dario2994 ha scritto: EDIT:uhm... mi sa che ho fatto un errorino nella funzione che trova i divisori... tento di correggere :)
Nessun problema, eh... era solo per farti notare che c'era qualcosa che non andava nell'output :P

Comunque ho capito cosa fa il tuo programma, mi pare sia una buona idea... anche se io sono abbastanza pigro e i 15 secondi mi vanno più che bene 8) È abbastanza interessante quel Progetto, io ne ho risolti una quindicina (i più semplici, eh)
[i]
Mathematical proofs are like diamonds: hard and clear.

[/i]
Rispondi