U E D R , A S I H C RSS

Factorial Factors/1002

Approach

‹จ Factorial ดŠ”  —„œ ํ•ด‹ „‚ฐ— Œ€ํ•ด ‹คŒ ฐ™€ ‹„ งŒ“ค–ดƒ„.
F(n) = Count(n) + F(n-1)
Count(n) = ํ•ด‹ n — Œ€ํ•œ ธˆ˜ํ•ญ ดํ•ฉ
ทธฆฌณ  F, Count “ค— Œ€ํ•ด„œ caching „ „ํ–‰ํ•  ˆ˜ žˆœฆฌ ƒฐ, ‹คŒ ฐ™ด ํ’€Œ.
~cpp
class Counter:
    def __init__(self):
        self._cache=[None] * 1000000

    def __call__(self,n):
        return self.count(n)

    def count(self,n,start=0):
        value = self._cache[n]
        if value != None: return value+start
        
        half = n/2
        for e in xrange(2,half+1):
            if n % e ==0:
                result = self.count(n/e,start+1)
                self._cache[n] = result
                return result
        
        result = start+1
        self._cache[n] = result
        return result

CountFunc = Counter()

def factorialFactor(n):
    total = sum((CountFunc(i) for i in xrange(2,n+1)))
    return total

def main():
    for i in [2,5,8,1996,123456,1000000]: print factorialFactor(i)

Š‚€ 

  • ํ˜‹œ‚˜ ํ•ด„œ C++ กœ ฝ”“œ ฐ”ฟ”ดคŠ”ฐ (ฝ”“œ ˜ฎธฐŠ”ฐ 5„) 100งŒ ตฌํ•˜Š”ฐŠ” 12ดˆ  •„ †Œš”.
    • •Œณ ฆฌฆ˜˜ †„ ณด‹ˆ Counter €„ด O(n^2) ด‹ค. caching „ ํ•จ—„ ทธ ‡‹คŠ” ฒƒ€ ฌด–ธ€ ‹คฅธ  ‘ฒ•ด žˆœฆฌ.
    • Python —„œ O(n^2) ธ •Œณ ฆฌฆ˜€ C++ —„œ„ O(n^2) ด‹ค. -_-
      ฒฐตญ€ Python —„œ 5ดˆ ‚ด ฐŸŠ” •Œณ ฆฌฆ˜„ งŒ“ค–ด• C++ กœ 1ดˆ ด‚ด˜ †„€ ‚˜˜ฌ ฒƒด‹ค.

  • ํ˜„ํƒœ •Œณ ฆฌฆ˜ †„ ณดณ  ขŒ ˆํ•˜‹ค. ‚ด€ ZP – ‚  •Œ€ ˜—ˆตฌ‚˜.;;
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:15
Processing time 0.0110 sec