eea.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #!/usr/bin/env python
  2. import csv
  3. def eea(a, b):
  4. """
  5. Calculates u*a + v*b = ggT
  6. returns (ggT, u, v, steps)
  7. """
  8. u, v, s, t, steps = 1, 0, 0, 1, 0
  9. while b > 0:
  10. q = a//b
  11. a, b = b, a-q*b
  12. u, s = s, u-q*s
  13. v, t = t, v-q*t
  14. steps += 1
  15. return a, u, v, steps
  16. def create_csv(n, filename):
  17. max_steps = 0
  18. with open(filename, 'wb') as csvfile:
  19. csvwriter = csv.writer(csvfile, delimiter=',',
  20. quotechar='"', quoting=csv.QUOTE_MINIMAL)
  21. csvwriter.writerow(["x", "y", "steps"])
  22. for x in range(n):
  23. for y in range(n):
  24. gcd, u, v, steps = eea(x, y)
  25. max_steps = max(steps, max_steps)
  26. csvwriter.writerow([x, y, steps])
  27. print("Maximum step number: %i" % max_steps)
  28. if __name__ == "__main__":
  29. from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
  30. parser = ArgumentParser(description=__doc__,
  31. formatter_class=ArgumentDefaultsHelpFormatter)
  32. parser.add_argument("-n",
  33. dest="n", default=10, type=int,
  34. help="how many lines get printed")
  35. args = parser.parse_args()
  36. create_csv(args.n, "data.csv")