Factorial Trailing Zeroes
Problem (yeniden ifade)
Tamsayı n verildiğinde n!’in kaç sondan sıfır içerdiğini döndür. Faktoriyeli hesaplama.
Sezgi
Sondan sıfır, 10 = 2 × 5 çarpanıdır. n!’de 2’ler her zaman 5’lerden fazladır, cevap 5 sayısıdır. 25 katları ekstra bir 5, 125 bir tane daha: ⌊n/5⌋ + ⌊n/25⌋ + ⌊n/125⌋ + ….
Yaklaşımlar
5 çarpanlarını say
DoğrulanmadıFikir. n = ⌊n/5⌋ tekrarla ve n’i toplama ekle, n 0 olana dek.
Yürüyüş. n = 25 → 5 + 1 = 6. n = 3 → 0. n = 10 → 2.
Trade-off. n!’i hesaplamak hemen taşar. Bu O(log₅ n) toplama. 25, 125, … ekstra 5’lerini unutma.
export function trailingZeroes(n: number): number {
let z = 0;
while (n > 0) {
n = Math.floor(n / 5);
z += n;
}
return z;
}
export function trailingZeroes(n: number): number {
let z = 0;
while (n > 0) {
n = Math.floor(n / 5);
z += n;
}
return z;
}
Şablon bağlantısı
Math & Number Theory’nin faktöriyel / bölünebilirlik şekli: çarpımı açmak yerine asal çarpan say.
Yansıma
- Sondaki sıfır, 10 çarpanı. 2’ler 5’lerden çok. Say
n/5 + n/25 + n/125. - 25 iki tane 5, 125 üç tane verir. Döngü
n’i 5’e bölerek bunu toplar. n < 5cevap 0. 25 cevap 6. Faktöriyeli yazmak taşar.