2016-07-16 8 views
0

Ich brauche Hilfe, um diese Lösung zu verstehen, um einen Primfaktor zu bekommen. Dies ist der Code demoWie wird der Modulo einer While-Schleife ausgeführt?

function getMaxPrimeFactor (n) { 
    var temp = n; 
    for(var i = 2; i < temp; i++) { 
     while (temp % i === 0) { 
      temp /= i; 
     } 
    } 
    console.log(temp); 
} 

getMaxPrimeFactor(13195); 

I die for-Schleife zu verstehen, aber ich weiß nicht, was auf der while-Schleife und die Division geht, wie hat er eine Leistung von 29 bekommen?

+0

Modul Sie den Rest der Division gibt, damit er die während läuft Schleife, bis der Rest nicht Null ist. – jfriend00

+0

@ jfriend00 danke, ok, ich console.log (i) und es ist 2 bis 29, während die Temp ist 13195. Wie wird dieser Code ausgeführt? –

Antwort

2

Hier ist was los ist:

Der Punkt der for Schleife ist jeden einzelnen Teiler zwischen 2 und dem aktuellen Wert von temp zu versuchen, die auf die ursprüngliche Zahl gleich beginnt.

Der Punkt der while Schleife ist, jeden dieser Teiler zu nehmen und sie so oft wie möglich zu versuchen. Solange der Rest 0 auftaucht, was bedeutet, dass er gleichmäßig geteilt wird, dann teile weiter und reduziere temp jedes Mal auf das Ergebnis der Division.

Also, while (temp % i === 0) bedeutet, die while-Schleife so lange weiter zu betreiben, wie temp durch i gleichmäßig ohne Rest teilt. Der % Modulooperator berechnet den Rest nach der Division.

Hier ist eine mehr instrumentierten Version, wenn Sie es zeigt Ihnen ein bisschen mehr über laufen, was los ist:

function getMaxPrimeFactor (n) { 
 
    var temp = n; 
 
    for(var i = 2; i < temp; i++) { 
 
     while (temp % i === 0) { 
 
      temp /= i; 
 
      console.log("factor=",i,", ",temp*i,"/",i, "=",temp); 
 
     } 
 
    } 
 
    console.log("remaining factor=",temp); 
 
} 
 

 
getMaxPrimeFactor(13195);

+0

Ein instrumentiertes Snippet hinzugefügt, um Ihnen zu zeigen, was es macht. – jfriend00

+0

Danke! Sie haben mehr geantwortet als gefragt. + rep –

1

while Hier wird überprüft, ob der Wert temp % i0 ist (das heißt, wenn temp teilbar mit i). Ist diese Bedingung true wird es speichern temp/i in temp

Also, wenn die while Bedingung wahr ist

i temp (temp % i) new_temp_value(temp/i) 
5 13195 0   2639 
7 2639 0   377 
13 377 0   29 
29 29  -   - //for loop stops here since `i < temp` condition doesn't satisfy. 

Last Temperaturwert ist 29

Wenn wir also von oben nur i Wert betrachten, erhalten wir 5, 7, 13, 29 welche Faktoren von 13195 sind.

heißt 5 * 7 * 13 * 29 = 13195

So ist der Maximalwert in Faktoren ist 29.

Verwandte Themen