Numeri di partizione più vicini


12

Il numero di partizioni di un numero intero è il numero di modi in cui il numero intero può essere rappresentato come una somma di numeri interi positivi.

Per esempio:

5
4 + 1
3 + 2
3 + 1 + 1
2 + 2 + 1
2 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1

Esistono 7 modi per rappresentare il numero 5, quindi 7 è il numero di partizione corrispondente al numero 5.

Numeri di partizione: OEIS: # A000041

Indicazioni

Scrivi un programma che accetta un numero intero positivo come input e genera i due numeri che generano i due numeri di partizione più vicini al numero di input.

  • L'input deve essere 1 numero intero positivo.
  • Se l'input non è un numero di partizione, l'output deve essere i 2 numeri interi positivi diversi che generano i due numeri di partizione più vicini al numero di input. (Se due numeri di partizione sono candidati uguali per uno dei numeri di output, non importa quale si sceglie.)
  • Se l'input è un numero di partizione, l'output deve essere 1 numero intero positivo che genera il numero di input.
  • L'input e l'output possono essere in qualsiasi formato ragionevole.
  • Si può presumere che l'input non sarà più grande di 100 milioni (es. Output non sarà mai maggiore di 95).
  • Le funzioni integrate per calcolare i numeri di partizione non sono consentite, insieme ad altre scappatoie standard .
  • Questo è , quindi vince il numero minimo di byte.

Numeri di partizione: OEIS: # A000041

Esempi

Input: 66
Output: 11, 12

(I numeri di partizione che corrispondono ai numeri 11 e 12 sono 56 e 77, che sono i due numeri di partizione più vicini a 66.)

Input: 42
Output: 10

(Il numero 42 è già un numero di partizione, quindi basta emettere il numero che corrisponde al numero di partizione.)

Input: 136
Output: 13, 14

(I due numeri di partizione più vicini a 136 sono in realtà entrambi MENO di 136 (ad es. 101 e 135), quindi l'output è 13 e 14 rispetto a 14 e 15.)

Input: 1
Output: 0   or   1

(Sia 0 che 1 sono output validi in questo caso speciale.)

Input: 2484
Output: 26, 25   or   26, 27

(Entrambe queste uscite sono validi, perché 2484 è pari d i posizione dal 1958 e 3010.)

Input: 4
Output: 3, 4

(Sì)


Non hai definito quale sia un numero di partizione
haskeller orgoglioso il

@proudhaskeller I numeri delle partizioni sono i numeri che si trovano nella sequenza OEIS collegata. La spiegazione per quale sia il numero di partizione 5è in alto. (Aggiungerò un chiarimento se pensi che non sia abbastanza chiaro.)
kukac67,

1
Questo è molto vicino all'essere un duplicato di questa precedente domanda di partizione .
Peter Taylor,

Risposte:


2

Pyth , 53

L?!b<b1sm&d*^_1tdy-b/*dt*3d2r_bhbJo^-QyN2U99<J-2qQyhJ

Spiegazione e altro golf da seguire.


4

Python 2, 179 byte

Z=range(1,99)
R=Z+[1]
for i in Z:R[i]=sum(-(-1)**k*(3*k*k-k<=i*2and R[i-k*(3*k-1)/2])for k in range(-i,i+1)if k)
f=lambda n:zip(*sorted((abs(n-R[i]),i)for i in Z))[1][:2-(n in R)]

Usa la formula ricorsiva dal teorema pentagonale di Eulero .

Chiama con f(2484). L'output è una tupla con uno o due numeri.


2

Mathematica, 124 123 byte

f@n_:=(p=SeriesCoefficient[1/Product[1-x^k,{k,#}],{x,0,#}]&;s=SortBy[Range@95,Abs[n-p@#]&];If[p@s[[1]]==n,s[[1]],s~Take~2])

Formula per i numeri di partizione presi dalla pagina OEIS . (Può o non può barare ... Non riuscivo a decidere.)

Uso:

In: f[136]

Out: {14, 13}

Non sto rispondendo per vincere. E sono sicuro che questo potrebbe essere ulteriormente approfondito.

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.