Sintesi
Data di ingresso k, trovare una partizione di interi 1a nin ksottoinsiemi libera a somma per il più grande nè possibile entro 10 minuti.
Contesto: numeri Schur
Una serie Aè senza somma se la sua somma totale A + A = { x + y | x, y in A}non ha elementi in comune con essa.
Per ogni numero intero positivo kesiste un numero intero più grande in S(k)modo che l'insieme {1, 2, ..., S(k)}possa essere partizionato in ksottoinsiemi senza somma. Questo numero è chiamato k esimo numero Schur (OEIS A045652 ).
Ad esempio S(2) = 4,. Siamo in grado di partizionare {1, 2, 3, 4}come {1, 4}, {2, 3}, e questa è la partizione unica in due sottoinsiemi senza somma, ma ora non possiamo aggiungere 5a nessuna delle parti.
Sfida
Scrivi un programma deterministico che procede come segue:
- Prendi un numero intero positivo
kcome input - Scrivi l'attuale timestamp di Unix su stdout
- Uscite una sequenza di partizioni di
1aninksottoinsiemi privo di somma per aumentaren, dopo ogni sequenza con il timestamp Unix corrente.
Il vincitore sarà il programma che stampa una partizione per il più grande nentro 10 minuti sul mio computer quando viene dato l'input 5. I legami verranno interrotti nel minor tempo possibile per trovare una partizione per la più grande n, media su tre esecuzioni: ecco perché l'output dovrebbe includere i timestamp.
Dettagli importanti:
- Ho Ubuntu Precise, quindi se la tua lingua non è supportata non sarò in grado di assegnarla.
- Ho una CPU Intel Core2 Quad, quindi se vuoi usare il multithreading non ha senso usare più di 4 thread.
- Se vuoi che io usi particolari flag o implementazioni del compilatore, documentalo chiaramente nella tua risposta.
- Non dovrai inserire nel tuo caso speciale il tuo codice per gestire l'input
5. - Non è necessario produrre ogni miglioramento riscontrato. Ad esempio, per l'input
2è possibile generare solo la partizionen = 4. Tuttavia, se non emetti nulla nei primi 10 minuti, lo segnerò comen = 0.
n=59e l'ordinamento per il maggior numero di numeri consentiti inferiore anextNdàn=64. L'ordinamento per la lunghezza dell'elenco di numeri non consentiti (che può avere ripetizioni) porta molto rapidamente a unn=30modello elegante .