3 def getNewPairs(depth,a,b):
7 return [(a,b),(a,b + m),(a + m,b + m)]
9 return [(a,b),(a,b + m),(a + m,b),(a + m,b + m)]
11 def lastDigits(number,depth):
12 return number & (2**depth - 1)
17 def factor(number, pairs = [(0,0)], depth=0):
18 test = lastDigits(number,depth)
23 product = multiply(*pair)
28 elif lastDigits(product,depth) == test:
29 newpairs += getNewPairs(depth,*pair)
31 return factor(number,newpairs,depth + 1)
33 if __name__ == '__main__':
34 print factor(611951 * 611953)