Codewars <Primes in numbers> 因子為質數的數字分解
阿新 • • 發佈:2020-10-14
題目要求:
給出指定數字的乘法分解,要求因子全為質數,如:n = 86240 should return "(2**5)(5)(7**2)(11)",**表示指數運算。
最初想法是先做小於 n 的質數表,再在迴圈中遍歷質數表,尋找餘數為 0 的質數。當 n 一大必然超時,超時的原因是計算了很多無用的質數,如 n=86240 我們最多需要到 11 的質數。
想到用一個變數 p 表示我們要和 n 做除法的質數,當 p 超過現有的質數表長度,我們就補充質數表,見下面的程式碼:
1 def solve(n): 2 d = dict() 3 p = 0 4 prime = []5 size = 0 6 num = 2 7 while n != 1: 8 while p >= size: 9 i = 0 10 while i < size and prime[i]*prime[i] <= num: 11 if not num%prime[i]: 12 num += 1 13 i = 0 14 continue 15i += 1 16 prime.append(num) 17 size += 1 18 num += 1 19 if not n % prime[p]: 20 d[prime[p]] = d[prime[p]]+1 if d.get(prime[p]) else 1 21 n /= prime[p] 22 else: 23 p += 1 24 res = "" 25 for b,e ind.items(): 26 if e==1: 27 res += "(%d)"%b 28 else: 29 res += "(%d**%d)"%(b,e) 30 return res
但還是超時,希望會的兄弟姐妹給點提示