Advertisement
Guest User

Untitled

a guest
May 1st, 2020
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.15 KB | None | 0 0
  1. import sys
  2. import math
  3. import itertools
  4.  
  5. def fermat_prime_and_combi():
  6.     ferm = [1] + [(2**(2**m))+1 for m in range(5)]
  7.     liste = set()
  8.     for i in range(len(ferm)):
  9.         for p in itertools.combinations(ferm,i):
  10.             r = 1
  11.             for elt in p:
  12.                 r *= elt
  13.             liste.add(r)
  14.     return liste
  15.  
  16. a, b = [int(i) for i in input().split()]
  17. result = 0
  18. p2 = 0
  19.  
  20. def is_mult_pow_2(n):
  21.     res = (int(n) & int(n-1)) == 0
  22.     return res
  23. # Write an action using print
  24. # To debug: print("Debug messages...", file=sys.stderr)
  25. fermat_p = fermat_prime_and_combi()
  26. last_traitement = set()
  27. en_cours = []
  28.  
  29. for x in range(b, a-1, -1):
  30.     en_cours = [x]
  31.     while True:
  32.         if x in last_traitement:
  33.             result += 1
  34.             break
  35.         elif is_mult_pow_2(x):
  36.             result += 1
  37.             last_traitement.update(en_cours)
  38.             break
  39.         elif x in fermat_p:
  40.             result += 1
  41.             last_traitement.update(en_cours)
  42.             break
  43.         elif x%2 == 0:
  44.             x = x/2
  45.             en_cours = en_cours  + [x]
  46.         else:
  47.             break
  48.  
  49. print(result)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement