Advertisement
bepisXDDD

Untitled

Nov 11th, 2019
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.17 KB | None | 0 0
  1. # calculates maximum p => factorial % divider^p == 0
  2. def maxPowerOf(divider, factorial):
  3.     sum = 0
  4.     maxP = 0
  5.     while(factorial/(divider**(maxP))>=1):
  6.         maxP+=1
  7.     curPow=divider;
  8.     for i in range(1, maxP) :
  9.         sum += int (factorial/curPow)
  10.         curPow*=divider
  11.     return sum
  12.  
  13. # number factorisation
  14. def splitToDividers(num) :
  15.    i = 2
  16.    dividers = []
  17.    while i* i <= num:
  18.        while num % i == 0:
  19.            dividers.append(i)
  20.            num = num / i
  21.  
  22.        i = i + 1
  23.    if num > 1:
  24.        dividers.append(num)
  25.    return dividers
  26.  
  27. # returns count of each divider, removes doubles from source
  28. def processDividers(dividers) :
  29.     countList = []
  30. i = 0
  31.     while i<len(dividers):
  32.         j = i + 1
  33.         countList.append(1)
  34.         while j<len(dividers):
  35.             if(dividers[i] == dividers[j]):
  36.                 del dividers[j]
  37.                 countList[i]+=1
  38.                 j -= 1
  39.             j += 1
  40.         i += 1
  41.     return countList
  42.  
  43. inp = input().split()
  44. number = int (inp[0])
  45. base = int (inp[1])
  46.  divs = splitToDividers(base)
  47. counts = processDividers(divs)
  48. minPower = maxPowerOf(divs[0], number)/counts[0]
  49. for i in range(1, len(divs)) :
  50.     curPower = maxPowerOf(divs[i], number)/counts[i]
  51.     minPower = min(minPower, curPower)
  52. print(int(minPower))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement