Anders als bei der Ursprungsidee geht es hier nur darum die tatsächliche Quersumme einer Zahl zu bilden.
Nach dem Motto: Trau keiner Statistik die du nicht selbst gefälscht hast: Man muss die Anzahl der Ziffern nur genügend groß werden lassen um den bevorzugten Algorithmus gewinnen zu lassen.
Eigentlich ist der Unterschied aber sowieso nicht so gravierend.

testcode:
Beginnend mit einer einstelligen Zahl, werden für immer länger werdende Zahlen, werden wiederholt die Quersummen berechnet.
Code: Alles auswählen
import random
import string
import matplotlib.pyplot as plt
ITERATIONS = 10000
MAX_DIGITS = 40
def crosssum(number):
return sum(map(int, str(number)))
def checksum(number):
result = 0
while number:
number, remain = divmod(number, 10)
result += remain
return result
def generate_digits(length):
test_digits = ""
for _ in range(length):
test_digits += random.choice(string.digits)
yield int(test_digits)
def main():
import timeit
fig, ax = plt.subplots()
ax.set_title(f"Testrun with {ITERATIONS} iterations and\na growing number of up to {MAX_DIGITS} digits")
ax.set_xlabel("digits in number")
ax.set_ylabel("time")
ax.grid()
for test_func in ["crosssum", "checksum"]:
time_data = [
timeit.timeit(f"{test_func}({test_number})", setup=f"from __main__ import {test_func}", number=ITERATIONS)
for test_number in generate_digits(MAX_DIGITS)
]
ax.plot(time_data, label=test_func)
ax.legend()
plt.show()
if __name__ == "__main__":
main()