power-number_0

Sonning ixtiyoriy butun darajasini hisoblash.

Sonning ixtiyoriy butun darajasini topish informatikaning boshlang’ich kurslarida o’rganilgan
sodda muammolardan biri.

Yechimi ham oddiy:

int pow = 1;
for(int i =0; i < m; i++)
{
pow*=n;
}

Anglaganingizdek, yuqoridagi kod n'ning m darajasini hisoblaydi. Kod n sonining m marta ko'paytirib chiqishga asoslangan. Bundan tezroq usul bormi? Ha bor ekan. Daraja bu sonni bir necha marta ko'paytirishdan iborat amal bo'lsa, qanday qilib bundan tez bo'lishi mumkin. Keling, 7^13 darajasini hisoblab ko'raylik. Demak,
7^13 = 7 * 7 * 7 * 7 * 7 * 7 * 7 * 7 * 7 * 7 * 7 * 7 * 7 = ((7^2 * 7)^2)^2*7
ko'rinishida ifodalab olishimiz mumkin. Bu usul kvadratlarga keltirib darajani hisoblash usuli hisoblanadi.

Formulani kodga aylantiramiz va quyidagi natijani olamiz.

///  
/// Sonning ixtiyoriy darajasini hisoblash
///  
/// son 
/// daraja 
///  x ning n darajasini qaytaradi 
public static double Pow(double x, int n)
{
    // agar n < 0 bo'lsa
    if (n < 0)
        return Pow(1 / x, -1 * n);
    //agar n = 0 bo'lsa
    if (n == 0)
        return 1;
    // n ga birga teng bo'lgan holat
    if (n == 1)
        return x;
    //dataga juft bo'lsa
    if ((n & 1) == 0)
        return Pow(x * x, n / 2);
    //toq bo'lsa
    return x * Pow(x * x, (n - 1) / 2);
}
private static void Main(string[] args)
{
     Console.WriteLine(Pow(3, -6));
}
//Natija: 0.00137174211248285

Bu usulning qulayligi shundaki n'ning tahminan 4 dan katta bo'lgan qiymatlarida, oddiy ko'paytirib borish usulidan tezroq ishlaydi. Ushbu usuldan keyinchalik qiyinroq muammolarning yechimi uchun foydalanamiz. Boshqacha qilib aytganda, sonning har qanday butun darajasini hisoblashni 4 marta ko'paytirish amali bilan bajarish mumkin.

Manba: normatov.com

(433 marta o'qilgan, bugun 1 marta o'qildi)

O'xshash maqolalar: