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.0418 sec