2017-06-09 1 views
-2

Wenn ich die Codezeile "num ++" in "num + = 2520" ändere, läuft der Code gut und gibt die richtige Antwort zurück, aber ich würde gerne wissen, warum es nicht so läuft, hauptsächlich weil ich es nicht getan habe Denken Sie an die Tatsache, dass die Zahl bei 2520 ein Vielfaches sein muss, bevor Sie die Antwort suchen, und ich sehe nicht, warum mein eigener Code die Antwort ohne diese Änderung nicht korrekt gibt. Für mich scheint es richtig zu sein. Leider endet die while-Schleife nie.Projekt Euler # 5 - Warum wird diese While-Schleife nicht fertig?

Meine Vermutung ist, es hat etwas damit zu tun, wie lange die richtige Nummer ist (232792560), denn wenn ich die Anforderungen sogar ein wenig reduziere (von 9 auf 8, per se), schafft es die while-Schleife.

long long int num = 1; 
    int div_counter = 1; 
    bool check = false; 

while(!check) 
{ 
    for(int i = 2; i < 21; i++) 
    { 
     if(num % i == 0) 
     { 
      div_counter++; 
     } 
    } 
    if(div_counter == 20) 
    { 
     check = true; 
    } 
    else 
    { 
     num++; 
     div_counter = 0; 
    } 
} 

return num; 
+0

Warum konstruieren Sie diese Zahl nicht direkt als LCM dieser Zahlen, verwenden Sie GCD, um die bereits enthaltenen Faktoren zu finden? – LutzL

+0

Sind Sie sicher, dass Sie lange genug gewartet haben? Wenn die 2520-Variante beispielsweise 0,1 Sekunden lang läuft, benötigt die Schritt-1-Variante 252 s = 4,2 min. Haben Sie versucht, das aktuelle 'num' zu debuggen, wenn es ein Vielfaches von 10000 ist? – LutzL

Antwort

2

Sie haben div_counter-1 statt 0 zurücksetzen.

Ihre for Schleife läuft nur 2-20 inklusive, so dass, wenn div_counter beginnt bei 0 der Maximalwert ist es erreichen können 19.

+0

Sie hatten Recht, aber ich wartete auch nicht lange genug - es gab mir schließlich die richtige Antwort. Ich danke dir sehr! –