ich vor kurzem über ein Verfahren gekommen sind, die den kleinsten Faktor einer bestimmten Zahl zurückgibt:Wie funktioniert diese Methode, die den kleinsten Faktor einer bestimmten Zahl findet?
public static int findFactor(int n)
{
int i = 1;
int j = n - 1;
int p = j; // invariant: p = i * j
while(p != n && i < j)
{
i++;
p += j;
while(p > n)
{
j--;
p -= i;
}
}
return p == n ? i : n;
}
Nach der Methode der Prüfung, ich habe die Mengen (falsch höchstwahrscheinlich) in der Lage gewesen, festzustellen, welche einige ist Variablen repräsentieren jeweils:
n = the int that is subject to factorization for
the purposes of determining its smallest factor
i = the next potential factor of n to be tested
j = the smallest integer which i can be multiplied by to yield a value >= n
Das Problem ist, ich weiß nicht, welche Menge p
darstellt. Die innere Schleife scheint (p+=j) - n
als ein potenzielles Vielfaches von i
zu behandeln, aber gegeben, was ich glaube, j
darstellt, verstehe ich nicht, wie das für alle i
oder wie die äußere Schleife für die "zusätzliche" Iteration entfallen kann der inneren Schleife, die bevor dieser endet als Ergebnis p < n
Angenommen I richtig haben festgestellt, durchgeführt ist, was n
, i
und j
repräsentieren, welche Menge sich p
darstellen?
Wenn irgendeine meiner Bestimmungen falsch ist, was stellt jede der Mengen dar?
Obwohl ich die Antwort von mindriot akzeptierte, möchte ich, dass Sie wissen, dass Ihre Antwort, besonders der letzte Absatz, eine Schlüsselrolle bei der Entwicklung meines Verständnisses der Methode gespielt hat. Vielen Dank! – Kevin
@kevin: Prost. Ich empfehle "Eine Methode der Programmierung von Edsger W. Dijkstra, W. H. J. Feijen, Joke Sterringa" –