Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from typing import List, Any
- def binarysearch(n: int, l: list, low, high):
- if high < low: return low
- mid = int(low + ((high - low) / 2))
- if (n == l[mid]): return mid
- if mid == low: return high
- if mid == high: return low
- elif n > l[mid]:
- return binarysearch(n, l, mid, high)
- else:
- return binarysearch(n, l, low, mid - 1)
- class primes:
- def __init__(self) :
- self.primescache = [2]
- self.lastnumber = 1
- def generate(self, n: int):
- if n < self.lastnumber: return
- for i in range(self.lastnumber, n, 2):
- if self.check(i): self.primescache.append(i)
- self.lastnumber = n
- if self.lastnumber % 2 == 0: self.lastnumber -= 1
- def check(self, n: int):
- #if n <= self.lastnumber: return (n in self.primescache)
- if n <= self.lastnumber: return (binarysearch(n,self.primescache,0,len(self.primescache)-1))
- if n < 2: return False
- if n == 2: return True
- if ((n % 2) == 0) and (n > 2): return False
- for i in range(3, int(n ** 0.5), 2):
- if n % i == 0:
- return False
- else:
- continue
- return True
- def getlist(self, n):
- list = []
- self.generate(n)
- for i in self.primescache:
- if i <= n: list.append(i)
- return list
- def getprimefactors(n):
- nc = n
- p1 = primes()
- pf = []
- while nc > 1:
- for i in p1.getlist(nc):
- if nc % i == 0:
- nc /= i
- pf.append(i)
- break
- return pf
- def main():
- p1 = primes()
- while 1:
- i = int(input())
- print(getprimefactors(i))
- if __name__ == "__main__": main()
Add Comment
Please, Sign In to add comment