Рубрики

Напишите программу для расчета pow (x, n)

Учитывая два целых числа x и n, напишите функцию для вычисления x n . Можно предположить, что x и n малы и переполнения не происходит.

Примеры :

Input : x = 2, n = 3
Output : 8

Input : x = 7, n = 2
Output : 49

Приведенное ниже решение делит задачу на подзадачи размера y / 2 и рекурсивно вызывает эти подзадачи.

C ++

// C ++ программа для вычисления pow (x, n)
#include<iostream>

using namespace std;

class gfg

{

      
/ * Функция для вычисления x, возведенного в степень y * /

public:

int power(int x, unsigned int y)

{

    if (y == 0)

        return 1;

    else if (y % 2 == 0)

        return power(x, y / 2) * power(x, y / 2);

    else

        return x * power(x, y / 2) * power(x, y / 2);

}
};

  
/ * Код водителя * /

int main()

{

    gfg g;

    int x = 2;

    unsigned int y = 3;

  

    cout << g.power(x, y);

    return 0;

}

  
// Этот код предоставлен SoM15242

С

#include<stdio.h>

  
/ * Функция для вычисления x, возведенного в степень y * /

int power(int x, unsigned int y)

{

    if (y == 0)

        return 1;

    else if (y%2 == 0)

        return power(x, y/2)*power(x, y/2);

    else

        return x*power(x, y/2)*power(x, y/2);

}

  
/ * Программа для проверки функции питания * /

int main()

{

    int x = 2;

    unsigned int y = 3;

  

    printf("%d", power(x, y));

    return 0;

}

Джава

class GFG {

    / * Функция для вычисления x, возведенного в степень y * /

    static int power(int x, int y)

    {

        if (y == 0)

            return 1;

        else if (y % 2 == 0)

            return power(x, y / 2) * power(x, y / 2);

        else

            return x * power(x, y / 2) * power(x, y / 2);

    }

  

    / * Программа для проверки функции питания * /

    public static void main(String[] args)

    {

        int x = 2;

        int y = 3;

  

        System.out.printf("%d", power(x, y));

    }

}

  
// Этот код предоставлен Smitha Dinesh Semwal

python3

# Python3 программа для вычисления pow (x, n)

  
# Функция для расчета х
# возведен во власть у

def power(x, y):

  

    if (y == 0): return 1

    elif (int(y % 2) == 0):

        return (power(x, int(y / 2)) *

               power(x, int(y / 2)))

    else:

        return (x * power(x, int(y / 2)) *

                   power(x, int(y / 2)))

  
Код водителя

x = 2; y = 3

print(power(x, y))

  
# Этот код предоставлен Смитой Динеш Семвал.

C #

using System;

  

public class GFG {

      

    // Функция для вычисления x, возведенного в степень y

    static int power(int x, int y)

    {

        if (y == 0)

            return 1;

        else if (y % 2 == 0)

            return power(x, y / 2) * power(x, y / 2);

        else

            return x * power(x, y / 2) * power(x, y / 2);

    }

  

    // Программа для проверки мощности функции

    public static void Main()

    {

        int x = 2;

        int y = 3;

  

        Console.Write(power(x, y));

    }

}

  
// Этот код предоставлен shiv_bhakt.

PHP

<?php
// Функция для расчета х
// возведен в степень у

function power($x, $y)

{

    if ($y == 0)

        return 1;

    else if ($y % 2 == 0)

        return power($x, (int)$y / 2) * 

               power($x, (int)$y / 2);

    else

        return $x * power($x, (int)$y / 2) * 

                    power($x, (int)$y / 2);

}

  
// Код драйвера

$x = 2;

$y = 3;

  

echo power($x, $y);

      
// Этот код предоставлен ajit
?>

Выход :

8

Сложность времени: O (n)
Космическая сложность: O (1)
Алгоритмическая парадигма: разделяй и властвуй.

Вышеприведенную функцию можно оптимизировать до O (logn), рассчитав мощность (x, y / 2) только один раз и сохранив ее.

/ * Функция для вычисления x, возведенного в степень y в O (logn) * /

int power(int x, unsigned int y)

{

    int temp;

    if( y == 0)

        return 1;

    temp = power(x, y/2);

    if (y%2 == 0)

        return temp*temp;

    else

        return x*temp*temp;

}

Сложность времени оптимизированного решения: O (logn)
Продолжим функцию pow для работы с отрицательным y и с плавающей точкой x.

C ++

/ * Расширенная версия функции мощности
который может работать для числа с плавающей запятой x и отрицательного y *
#include <bits/stdc++.h>

using namespace std;

  

float power(float x, int y) 

    float temp; 

    if(y == 0) 

        return 1; 

    temp = power(x, y / 2); 

    if (y % 2 == 0) 

        return temp * temp; 

    else

    

        if(y > 0) 

            return x * temp * temp; 

        else

            return (temp * temp) / x; 

    

  
// Код драйвера

int main() 

    float x = 2; 

    int y = -3; 

    cout << power(x, y); 

    return 0; 

  
// Это код добавлен
// ратбхупендра

С

/ * Расширенная версия функции мощности, которая может работать

 для числа с плавающей запятой x и отрицательного значения y * /

#include<stdio.h>

  

float power(float x, int y)

{

    float temp;

    if( y == 0)

       return 1;

    temp = power(x, y/2);       

    if (y%2 == 0)

        return temp*temp;

    else

    {

        if(y > 0)

            return x*temp*temp;

        else

            return (temp*temp)/x;

    }

}  

  
/ * Программа для проверки функции питания * /

int main()

{

    float x = 2;

    int y = -3;

    printf("%f", power(x, y));

    return 0;

}

Джава

/ * Java-код для расширенной версии степенной функции
которые могут работать для чисел с плавающей запятой x и отрицательных y * /

class GFG {

      

    static float power(float x, int y)

    {

        float temp;

        if( y == 0)

            return 1;

        temp = power(x, y/2); 

          

        if (y%2 == 0)

            return temp*temp;

        else

        {

            if(y > 0)

                return x * temp * temp;

            else

                return (temp * temp) / x;

        }

    

      

    / * Программа для проверки функции питания * /

    public static void main(String[] args)

    {

        float x = 2;

        int y = -3;

        System.out.printf("%f", power(x, y));

    }

}

  
// Этот код предоставлен Смитой Динеш Семвал.

python3

# Python3 код для расширенной версии
# Степенная функция, которая может работать
# для числа с плавающей запятой x и отрицательного y

  

def power(x, y):

  

    if(y == 0): return 1

    temp = power(x, int(y / 2)) 

      

    if (y % 2 == 0):

        return temp * temp

    else:

        if(y > 0): return x * temp * temp

        else: return (temp * temp) / x

      
Код водителя

x, y = 2, -3

print('%.6f' %(power(x, y)))

  
# Этот код предоставлен Смитой Динеш Семвал.

C #

// C # код для расширенной версии степенной функции
// это может работать с плавающей точкой x и отрицательным y

  

using System;

  

public class GFG{

      

    static float power(float x, int y)

    {

        float temp;

          

        if( y == 0)

            return 1;

        temp = power(x, y/2); 

          

        if (y % 2 == 0)

            return temp * temp;

        else

        {

            if(y > 0)

                return x * temp * temp;

            else

                return (temp * temp) / x;

        }

    

      

    // Программа для проверки мощности функции

    public static void Main()

    {

        float x = 2;

        int y = -3;

          

        Console.Write(power(x, y));

    }

}

  
// Этот код предоставлен shiv_bhakt.

PHP

<?php
// Расширенная версия power
// функция, которая может работать
// для числа с плавающей запятой x и отрицательного значения y

  

function power($x, $y)

{

    $temp;

    if( $y == 0)

    return 1;

    $temp = power($x, $y / 2);     

    if ($y % 2 == 0)

        return $temp * $temp;

    else

    {

        if($y > 0)

            return $x

                   $temp * $temp;

        else

            return ($temp

                    $temp) / $x;

    }

  
// Код драйвера

$x = 2;

$y = -3;

echo power($x, $y);

  
// Этот код предоставлен ajit
?>

Выход :

0.125000


Напишите итерационную функцию O (Log y) для pow (x, y)
Модульная экспонента (мощность в модульной арифметике)

Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Напишите программу для расчета pow (x, n)

0.00 (0%) 0 votes