def gcd( a, b ):
"greatest common divisor"
while True:
c = a % b
if c < 1e-5:
return b
a, b = b, c
def gcdset( a_set ):
"use the pairwise gcd to find gcd of a set"
x = a_set.pop()
total = x
for u in a_set:
x = gcd( u, x )
# the following step is optional,
# some sort of stabilization just for improved accuracy
total = total + u
x = total / round(total/x)
return x
# the list where we want to find the gcd
inputlist = [2239.864226650253, 1250.4096410911607, 1590.1948696485413,
810.0479848807954, 2177.343744595695, 54.3656365691809, 2033.2748076873656,
2074.049035114251, 108.7312731383618, 2188.216871909531]
# we turn it into a set to get rid of duplicates
aset = set(inputlist)
print(gcdset( aset ))
ZGVmIGdjZCggYSwgYiApOgogICAgImdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIgogICAgd2hpbGUgVHJ1ZToKICAgICAgICBjID0gYSAlIGIKICAgICAgICBpZiBjIDwgMWUtNToKICAgICAgICAgICAgcmV0dXJuIGIKICAgICAgICBhLCBiID0gYiwgYwoKZGVmIGdjZHNldCggYV9zZXQgKToKICAgICJ1c2UgdGhlIHBhaXJ3aXNlIGdjZCB0byBmaW5kIGdjZCBvZiBhIHNldCIKICAgIHggPSBhX3NldC5wb3AoKQogICAgdG90YWwgPSB4CiAgICBmb3IgdSBpbiBhX3NldDoKICAgICAgICB4ID0gZ2NkKCB1LCB4ICkKICAgICAgICAjIHRoZSBmb2xsb3dpbmcgc3RlcCBpcyBvcHRpb25hbCwKICAgICAgICAjIHNvbWUgc29ydCBvZiBzdGFiaWxpemF0aW9uIGp1c3QgZm9yIGltcHJvdmVkIGFjY3VyYWN5CiAgICAgICAgdG90YWwgPSB0b3RhbCArIHUKICAgICAgICB4ID0gdG90YWwgLyByb3VuZCh0b3RhbC94KQoKICAgIHJldHVybiB4CgojIHRoZSBsaXN0IHdoZXJlIHdlIHdhbnQgdG8gZmluZCB0aGUgZ2NkCmlucHV0bGlzdCA9IFsyMjM5Ljg2NDIyNjY1MDI1MywgMTI1MC40MDk2NDEwOTExNjA3LCAxNTkwLjE5NDg2OTY0ODU0MTMsCiAgICA4MTAuMDQ3OTg0ODgwNzk1NCwgMjE3Ny4zNDM3NDQ1OTU2OTUsIDU0LjM2NTYzNjU2OTE4MDksIDIwMzMuMjc0ODA3Njg3MzY1NiwKICAgIDIwNzQuMDQ5MDM1MTE0MjUxLCAxMDguNzMxMjczMTM4MzYxOCwgMjE4OC4yMTY4NzE5MDk1MzFdCgojIHdlIHR1cm4gaXQgaW50byBhIHNldCB0byBnZXQgcmlkIG9mIGR1cGxpY2F0ZXMKYXNldCA9IHNldChpbnB1dGxpc3QpCnByaW50KGdjZHNldCggYXNldCApKQ==