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