2011年12月14日 星期三

PKU1401-Factorial

題目:http://poj.org/problem?id=1401
(經典問題)
給一正整數N介於1...1000000000,問N!尾綴連續有幾個0呢?
好比說15!=1307674368000,答案就是3


程式碼:http://codepad.org/5yyKjqXc

我們知道如果有3個0,就意味10^3是15!的一個因數(而且10^4不是)
那麼怎麼樣知道15*14*...*3*2*1能存在最大的因數10^i是多少呢?

把10質因數分解一下:10=5*2

阿哈!就是這個

只要統計最大的因數5^i,i就是答案

為什麼呢?因為質因數2比質因數5容易出現太多太多,有幾個5就能(湊出來)有幾個10

所以我們模仿轉2進位那樣,試著轉出5進位,好比說範例測資1024:
1024 / 5 = 204...具有5當因數的各數
204 / 5 = 40...具有5^2因數的各數
40 / 5 = 8...具有5^3
8 / 5 = 1...具有5^4
所以加總得到答案253

沒有留言:

張貼留言