Ich habe einen erstaunlichen Trick gefunden, um Fakultäten in nur der Hälfte der tatsächlichen Multiplikationen zu finden.
Bitte haben Sie etwas Geduld, da dies ein etwas langer Beitrag ist.
Für gerade Zahlen:
Um die Multiplikation mit geraden Zahlen zu halbieren, erhalten Sie n / 2 Faktoren. Der erste Faktor ist die Zahl, von der Sie die Fakultät nehmen, der nächste ist diese Zahl plus diese Zahl minus zwei. Die nächste Nummer ist die vorherige Nummer plus die zuletzt hinzugefügte Nummer minus zwei. Sie sind fertig, wenn die letzte Zahl, die Sie hinzugefügt haben, zwei war (dh 2) . Das hat wahrscheinlich nicht viel Sinn gemacht, also lassen Sie mich Ihnen ein Beispiel geben.
8! = 8 * (8 + 6 = 14) * (14 + 4 = 18) * (18 + 2 = 20)
8! = 8 * 14 * 18 * 20 which is **40320**
Beachten Sie, dass ich mit 8 angefangen habe, dann war die erste Zahl, die ich hinzugefügt habe, 6, dann 4, dann 2, wobei jede hinzugefügte Zahl zwei weniger ist als die zuvor hinzugefügte Zahl. Diese Methode entspricht dem Multiplizieren der kleinsten Zahlen mit den größten Zahlen, nur mit weniger Multiplikation, wie folgt:
8! = 1 * 2 * 3 * 4 * 5 * 6 * 7 *
8! = (1 * 8) * (2 * 7) * (3 * 6) * (4 * 5)
8! = 8 * 14 * 18 * 20
Einfach ist es nicht :)
Jetzt für ungerade Zahlen: Wenn die Zahl ungerade ist, ist das Addieren dasselbe, da Sie jedes Mal zwei subtrahieren, aber bei drei aufhören. Die Anzahl der Faktoren ändert sich jedoch. Wenn Sie die Zahl durch zwei teilen, erhalten Sie eine Zahl, die auf .5 endet. Der Grund ist, dass, wenn wir die Enden miteinander multiplizieren, die mittlere Zahl übrig bleibt. Grundsätzlich kann dies alles gelöst werden, indem nach einer Anzahl von Faktoren gesucht wird, die gleich der durch zwei geteilten Zahl sind, aufgerundet. Für Köpfe ohne mathematischen Hintergrund ergab dies wahrscheinlich auch keinen Sinn. Lassen Sie mich ein Beispiel geben:
9! = 9 * (9 + 7 = 16) * (16 + 5 = 21) * (21 + 3 = 24) * (roundUp(9/2) = 5)
9! = 9 * 16 * 21 * 24 * 5 = **362880**
Hinweis: Wenn Ihnen diese Methode nicht gefällt, können Sie auch einfach die Fakultät der geraden Zahl vor der ungeraden Zahl (in diesem Fall acht) nehmen und mit der ungeraden Zahl multiplizieren (dh 9! = 8! * 9).
Jetzt implementieren wir es in Java:
public static int getFactorial(int num)
{
int factorial=1;
int diffrennceFromActualNum=0;
int previousSum=num;
if(num==0) //Returning 1 as factorial if number is 0
return 1;
if(num%2==0)// Checking if Number is odd or even
{
while(num-diffrennceFromActualNum>=2)
{
if(!isFirst)
{
previousSum=previousSum+(num-diffrennceFromActualNum);
}
isFirst=false;
factorial*=previousSum;
diffrennceFromActualNum+=2;
}
}
else // In Odd Case (Number * getFactorial(Number-1))
{
factorial=num*getFactorial(num-1);
}
return factorial;
}
isFirstist eine als statisch deklarierte boolesche Variable; Es wird für den ersten Fall verwendet, in dem wir die vorherige Summe nicht ändern möchten.
Versuchen Sie es mit geraden und ungeraden Zahlen.