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.