En yakın bölüm numaraları


12

Bir tamsayının bölüm sayısı, tamsayının pozitif tamsayıların toplamı olarak temsil edilme yollarının sayısıdır.

Örneğin:

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

5 sayısını temsil etmenin 7 yolu vardır, bu nedenle 7, 5 numarasına karşılık gelen bölüm numarasıdır.

Bölüm numaraları: OEIS: # A000041

Talimatlar

Girdi olarak pozitif bir tamsayı alan ve en yakın iki bölüm numarasını oluşturan iki sayıyı giriş numarasına veren bir program yazın .

  • Giriş 1 pozitif tamsayı olmalıdır.
  • Giriş bir bölüm numarası değilse , çıkış, giriş numarasına en yakın iki bölüm numarasını oluşturan 2 farklı pozitif tamsayı olmalıdır. (İki bölüm numarası, çıktı numaralarından biri için eşit adaysa, hangisini seçtiğiniz önemli değildir.)
  • Giriş durumunda olan bir bölüm numarası, çıkış, giriş numarası oluşturur 1 pozitif bir tamsayı olmalıdır.
  • Giriş ve çıkış herhangi bir makul formatta olabilir.
  • Girdinin 100 milyondan fazla olmayacağını varsayabilirsiniz (örneğin, çıktı asla 95'ten büyük olmayacaktır).
  • Dahili hesapla bölüm numaralarına fonksiyonları vardır değil diğer birlikte izin Standart boşluklar .
  • Bu , bu yüzden en az bayt sayısı kazanır.

Bölüm numaraları: OEIS: # A000041

Örnekler

Input: 66
Output: 11, 12

(11 ve 12 sayılarına karşılık gelen bölüm numaraları, 66'ya en yakın iki bölüm numarası olan 56 ve 77'dir.)

Input: 42
Output: 10

(42 sayısı zaten bir bölüm numarasıdır, bu nedenle bölüm numarasına karşılık gelen sayıyı çıktılayın.)

Input: 136
Output: 13, 14

(136'ya en yakın iki bölüm numarası aslında 136'dan daha azdır (örneğin, 101 ve 135), bu nedenle çıktı 14 ve 15'in aksine 13 ve 14'tür.)

Input: 1
Output: 0   or   1

(Bu özel durumda hem 0 hem de 1 geçerli çıkışlardır.)

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

(2484 eşit d, çünkü bu çıkışların her ikisi de geçerlidir, i duruş 1958 ve 3010 den)

Input: 4
Output: 3, 4

(Evet)


Bir bölüm numarasının ne olduğunu tanımlamadınız
gururlu haskeller

@proudhaskeller Bölüm numaraları, bağlı OEIS dizisindeki numaralardır. Bölüm numarasının ne olduğuna ilişkin açıklama 5en üstte. (Yeterince açık olmadığını düşünüyorsanız açıklama ekleyeceğim.)
kukac67

1
Bu, daha önceki bölüm sorununun bir dupe'sine çok yakın .
Peter Taylor

Yanıtlar:


2

Pyth , 53

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

Açıklama ve daha fazla golf takip edin.


4

Python 2, 179 bayt

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)]

Özyinelemeli formülü kullanır Euler pentagonal teoreminden .

İle arayın f(2484). Çıktı bir veya iki sayıdan oluşan bir demettir.


2

Mathematica, 124 123 bayt

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])

Alınan bölüm numaraları için formül OEIS sayfasından . (Aldatıyor ya da almıyor olabilir ... Karar veremedim.)

Kullanımı:

In: f[136]

Out: {14, 13}

Kazanmak için cevap vermiyorum. Ve eminim bu daha da golf olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.