Saya menemukan trik yang luar biasa untuk menemukan faktorial hanya dalam setengah perkalian sebenarnya.
Harap bersabar karena ini adalah posting yang sedikit panjang.
Untuk Bilangan Genap:
Untuk membagi dua perkalian dengan bilangan genap, Anda akan mendapatkan n / 2 faktor. Faktor pertama adalah bilangan yang Anda ambil faktorialnya, kemudian faktor berikutnya adalah bilangan itu ditambah bilangan itu dikurangi dua. Angka berikutnya adalah angka sebelumnya ditambah angka terakhir dikurangi dua. Anda selesai ketika nomor terakhir yang Anda tambahkan adalah dua (yaitu 2) . Itu mungkin tidak masuk akal, jadi izinkan saya memberi Anda contoh.
8! = 8 * (8 + 6 = 14) * (14 + 4 = 18) * (18 + 2 = 20)
8! = 8 * 14 * 18 * 20 which is **40320**
Perhatikan bahwa saya mulai dengan 8, lalu angka pertama yang saya tambahkan adalah 6, lalu 4, lalu 2, setiap angka ditambah dua kurang dari angka yang ditambahkan sebelumnya. Cara ini sama dengan mengalikan bilangan terkecil dengan bilangan terbesar, hanya dengan perkalian yang lebih sedikit, seperti:
8! = 1 * 2 * 3 * 4 * 5 * 6 * 7 *
8! = (1 * 8) * (2 * 7) * (3 * 6) * (4 * 5)
8! = 8 * 14 * 18 * 20
Sederhana bukan :)
Sekarang Untuk Angka Ganjil: Jika angkanya ganjil, penjumlahannya sama, seperti Anda kurangi dua setiap kali, tetapi Anda berhenti di tiga. Namun jumlah faktor berubah. Jika Anda membagi angka dengan dua, Anda akan mendapatkan beberapa angka yang diakhiri dengan 0,5. Alasannya adalah jika kita mengalikan kedua ujungnya, kita akan mendapatkan angka tengahnya. Pada dasarnya, ini semua dapat diselesaikan dengan menyelesaikan sejumlah faktor yang sama dengan angka dibagi dua, dibulatkan. Ini mungkin juga tidak masuk akal bagi pikiran tanpa latar belakang matematika, jadi izinkan saya memberikan contoh:
9! = 9 * (9 + 7 = 16) * (16 + 5 = 21) * (21 + 3 = 24) * (roundUp(9/2) = 5)
9! = 9 * 16 * 21 * 24 * 5 = **362880**
Catatan: Jika Anda tidak menyukai metode ini, Anda juga bisa mengambil faktorial dari bilangan genap sebelum ganjil (dalam hal ini delapan) dan mengalikannya dengan bilangan ganjil (yaitu 9! = 8! * 9).
Sekarang mari kita terapkan di 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;
}
isFirstadalah variabel boolean yang dideklarasikan sebagai statis; ini digunakan untuk kasus pertama di mana kami tidak ingin mengubah jumlah sebelumnya.
Cobalah dengan angka genap dan ganjil.