In un'intervista è stato chiesto il seguente problema. Dato un numero 11 n (dove n
∈ [0, 1000]
), ottenere il conteggio di 1
s nel risultato. Ad esempio, n = 3, 11 = 1331, in modo che il risultato atteso sarebbe 2. O dato n = 6, 11 = 1.771.561, il risultato atteso sarebbe 3.Calcola il conteggio di quelli risultanti da 11^n
Il mio primo pensiero è stato che doveva fare qualcosa con il pascal's triangle e binomial coefficients (perché come sappiamo semplicemente il calcolo di pow(11, 1000)
non funziona, almeno in C).
Ho pensato semplicemente iterando sulle colonne nel triangolo di Pascal, dovrei darmi il risultato, ma chiaramente non funziona.
Quindi in questo momento sono bloccato. Il mio prossimo pensiero è stato quello di utilizzare una specie di bignum library
per risolvere il problema, ma a mio parere ci deve essere un altro modo per risolvere questo tipo di compito.
Aggiornamento ho dimenticato di dire che avrei dovuto risolvere questo compito con C/Objective-C.
non hai bisogno di alcuna libreria bignum di moltiplicare per 11 :-) –
Python può contare il numero di '' 1's in 11^100000' in circa '2.09s', quindi per i vostri vincoli, la libreria bignum dovrebbe funzionare. Non penso che ci sia alcun tipo di soluzione analitica a questo problema. – Blender
Sembra un ottimo candidato per la pre-elaborazione. – cheeken