No106 O(n)解法
min_p[n] = nの一番小さい素因数
cnt[n] = nの素因数の種類
とします
* min_pの計算
いま考えている数をnとして p <= min_p[n] となるような 素数p を持ってくると min_p[n * p] = p になります
これを使い min_p テーブルを更新していくと O(n) で表を埋めることができます
参考)https://code.google.com/p/teamscl/source/browse/trunk/3.+Sieve+of+Eratosthenes+in+linear+time.txt?spec=svn12&r=12
* cntの計算
nが素数である場合 cnt[n] = 1
nが合成数である場合
- min_p[n / min_p[n]] == min_p[n] であれば cnt[n] = cnt[n / min_p[n]]
- そうでないなら cnt[n] = cnt[n / min_p[n]] + 1
* 実装例
http://y...content-available-to-author-only...r.me/submissions/6704
Tm8xMDYgTyhuKeino+azlQoKbWluX3Bbbl0gPSBu44Gu5LiA55Wq5bCP44GV44GE57Sg5Zug5pWwCmNudFtuXSA9IG7jga7ntKDlm6DmlbDjga7nqK7poZ4K44Go44GX44G+44GZCgoqIG1pbl9w44Gu6KiI566XCuOBhOOBvuiAg+OBiOOBpuOBhOOCi+aVsOOCkm7jgajjgZfjgaYgcCA8PSBtaW5fcFtuXSDjgajjgarjgovjgojjgYbjgaog57Sg5pWwcCDjgpLmjIHjgaPjgabjgY/jgovjgaggbWluX3BbbiAqIHBdID0gcCDjgavjgarjgorjgb7jgZkK44GT44KM44KS5L2/44GEIG1pbl9wIOODhuODvOODluODq+OCkuabtOaWsOOBl+OBpuOBhOOBj+OBqCBPKG4pIOOBp+ihqOOCkuWfi+OCgeOCi+OBk+OBqOOBjOOBp+OBjeOBvuOBmQrlj4LogIMpaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC90ZWFtc2NsL3NvdXJjZS9icm93c2UvdHJ1bmsvMy4rU2lldmUrb2YrRXJhdG9zdGhlbmVzK2luK2xpbmVhcit0aW1lLnR4dD9zcGVjPXN2bjEyJnI9MTIKCiogY25044Gu6KiI566XCm7jgYzntKDmlbDjgafjgYLjgovloLTlkIggY250W25dID0gMQpu44GM5ZCI5oiQ5pWw44Gn44GC44KL5aC05ZCICi0gbWluX3BbbiAvIG1pbl9wW25dXSA9PSBtaW5fcFtuXSDjgafjgYLjgozjgbAgY250W25dID0gY250W24gLyBtaW5fcFtuXV0KLSDjgZ3jgYbjgafjgarjgYTjgarjgokgY250W25dID0gY250W24gLyBtaW5fcFtuXV0gKyAxCgoqIOWun+ijheS+iwpodHRwOi8veS4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uci5tZS9zdWJtaXNzaW9ucy82NzA0