Ich versuche, die Frage von Project Euler zu lösen:

2520 ist die kleinste Zahl, die ohne Rest durch jede der Zahlen von 1 bis 10 geteilt werden kann. Was ist die kleinste positive Zahl, die durch alle Zahlen von 1 bis 20 gleichmäßig teilbar ist?

Ich habe mir unten die Python-Lösung ausgedacht, aber gibt es eine Möglichkeit, die Nummer in if zu schleifen, anstatt alle schreiben zu müssen.

def smallest_m():
    start=1
    while True:
        if start%2==0 and start%3==0 and start%4==0 and start%5==0 and start%5==0 and start%6==0 and start%7==0 and start%8==0 and start%9==0 and start%10==0 and start%11==0 and start%12==0 and start%13==0 and start%14==0 and start%15==0 and start%16==0 and start%17==0 and start%18==0 and start%19==0 and start%20==0:
            print(start)
            break
        else:
            start+=1

smallest_m()
1
Mwangi Njuguna 17 Apr. 2018 im 19:56

3 Antworten

Beste Antwort

Sie können einen Generatorausdruck und die Funktion all verwenden:

def smallest_m():
    start = 1
    while True:
        if all(start % i == 0 for i in range(2, 20+1)):
            print(start)
            break
        else:
            start+=1

smallest_m()
1
thebjorn 17 Apr. 2018 im 17:03

Versuche dies

n = 2520
result = True

for i in range(1, 11):
    if (n % i != 0):
        result = False

print(result)
0
prms 17 Apr. 2018 im 17:00

Hier ist eine Lösung, die einen Generator verwendet. Die kleinste Zahl, die ich sehe, ist 232792560.

def smallest_m(n):
    for k in range(20, n, 20):
        match = True
        for i in range(1, 21):
            if k % i != 0:
                match = False
                break
        else:
            if match:
                yield k

res = next(smallest_m(2432902008176640001))

# 232792560
1
jpp 17 Apr. 2018 im 17:09