Open In App

Elements of Array which can be expressed as power of some integer to given exponent K

Given an array arr[] of size N, and an integer K, the task is to print all the elements of the Array which can be expressed as a power of some integer (X) to the exponent K, i.e. XK.
Examples: 
 

Input: arr[] = {46656, 64, 256, 729, 16, 1000}, K = 6 
Output: 46656 64 729 
Explanation: 
Only numbers 46656, 64, 729 can be expressed as a power of 6. 
46656 = 66
64 = 26
729 = 36
Input: arr[] = {23, 81, 256, 125, 16, 1000}, K = 4 
Output: 81 256 16 
Explanation: 
The number 81, 256, 16 can be expressed as a power of 4. 
 

 

Approach: To solve the problem mentioned above the main idea is to for each number in the Array, find the N-th root of a number. Then check whether this number is an integer or not. If yes, then print it, else skip to the next number.
Below is the implementation of the above approach: 
 




// C++ implementation to print elements of
// the Array which can be expressed as
// power of some integer to given exponent K
 
#include <bits/stdc++.h>
using namespace std;
#define ll long long
 
// Method returns Nth power of A
double nthRoot(ll A, ll N)
{
 
    double xPre = 7;
 
    // Smaller eps, denotes more accuracy
    double eps = 1e-3;
 
    // Initializing difference between two
    // roots by INT_MAX
    double delX = INT_MAX;
 
    // x^K denotes current value of x
    double xK;
 
    // loop until we reach desired accuracy
    while (delX > eps) {
 
        // calculating current value from previous
        // value by newton's method
        xK = ((N - 1.0) * xPre
              + (double)A / pow(xPre, N - 1))
             / (double)N;
 
        delX = abs(xK - xPre);
        xPre = xK;
    }
 
    return xK;
}
 
// Function to check
// whether its k root
// is an integer or not
bool check(ll no, int k)
{
    double kth_root = nthRoot(no, k);
    ll num = kth_root;
 
    if (abs(num - kth_root) < 1e-4)
        return true;
 
    return false;
}
 
// Function to find the numbers
void printExpo(ll arr[], int n, int k)
{
    for (int i = 0; i < n; i++) {
        if (check(arr[i], k))
            cout << arr[i] << " ";
    }
}
 
// Driver code
int main()
{
 
    int K = 6;
 
    ll arr[] = { 46656, 64, 256,
                 729, 16, 1000 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    printExpo(arr, n, K);
 
    return 0;
}




// Java implementation to print elements of
// the Array which can be expressed as
// power of some integer to given exponent K
 
class GFG{
  
// Method returns Nth power of A
static double nthRoot(long A, long N)
{
  
    double xPre = 7;
  
    // Smaller eps, denotes more accuracy
    double eps = 1e-3;
  
    // Initializing difference between two
    // roots by Integer.MAX_VALUE
    double delX = Integer.MAX_VALUE;
  
    // x^K denotes current value of x
    double xK = 0;
  
    // loop until we reach desired accuracy
    while (delX > eps) {
  
        // calculating current value from previous
        // value by newton's method
        xK = ((N - 1.0) * xPre
              + (double)A / Math.pow(xPre, N - 1))
             / (double)N;
  
        delX = Math.abs(xK - xPre);
        xPre = xK;
    }
  
    return xK;
}
  
// Function to check
// whether its k root
// is an integer or not
static boolean check(long no, int k)
{
    double kth_root = nthRoot(no, k);
    long num = (long) kth_root;
  
    if (Math.abs(num - kth_root) < 1e-4)
        return true;
  
    return false;
}
  
// Function to find the numbers
static void printExpo(long arr[], int n, int k)
{
    for (int i = 0; i < n; i++) {
        if (check(arr[i], k))
            System.out.print(arr[i]+ " ");
    }
}
  
// Driver code
public static void main(String[] args)
{
  
    int K = 6;
  
    long arr[] = { 46656, 64, 256,
                 729, 16, 1000 };
    int n = arr.length;
  
    printExpo(arr, n, K);
  
}
}
 
// This code is contributed by sapnasingh4991




# Python3 implementation to print elements of
# the Array which can be expressed as
# power of some integer to given exponent K
 
# Method returns Nth power of A
def nthRoot(A, N):
 
    xPre = 7
 
    # Smaller eps, denotes more accuracy
    eps = 1e-3
 
    # Initializing difference between two
    # roots by INT_MAX
    delX = 10**9
 
    # x^K denotes current value of x
    xK = 0
 
    # loop until we reach desired accuracy
    while (delX > eps):
 
        # calculating current value from previous
        # value by newton's method
        xK = ((N - 1.0) * xPre+ A /pow(xPre, N - 1))/ N
 
        delX = abs(xK - xPre)
        xPre = xK
 
    return xK
 
# Function to check
# whether its k root
# is an integer or not
def check(no, k):
    kth_root = nthRoot(no, k)
    num = int(kth_root)
 
    if (abs(num - kth_root) < 1e-4):
        return True
 
    return False
 
# Function to find the numbers
def printExpo(arr, n, k):
    for i in range(n):
        if (check(arr[i], k)):
            print(arr[i],end=" ")
 
# Driver code
if __name__ == '__main__':
 
    K = 6
 
    arr = [46656, 64, 256,729, 16, 1000]
    n = len(arr)
 
    printExpo(arr, n, K)
 
# This code is contributed by mohit kumar 29




// C# implementation to print elements of
// the Array which can be expressed as
// power of some integer to given exponent K
using System;
 
class GFG{
   
// Method returns Nth power of A
static double nthRoot(long A, long N)
{
   
    double xPre = 7;
   
    // Smaller eps, denotes more accuracy
    double eps = 1e-3;
   
    // Initializing difference between two
    // roots by int.MaxValue
    double delX = int.MaxValue;
   
    // x^K denotes current value of x
    double xK = 0;
   
    // loop until we reach desired accuracy
    while (delX > eps) {
   
        // calculating current value from previous
        // value by newton's method
        xK = ((N - 1.0) * xPre
              + (double)A / Math.Pow(xPre, N - 1))
             / (double)N;
   
        delX = Math.Abs(xK - xPre);
        xPre = xK;
    }
   
    return xK;
}
   
// Function to check
// whether its k root
// is an integer or not
static bool check(long no, int k)
{
    double kth_root = nthRoot(no, k);
    long num = (long) kth_root;
   
    if (Math.Abs(num - kth_root) < 1e-4)
        return true;
   
    return false;
}
   
// Function to find the numbers
static void printExpo(long []arr, int n, int k)
{
    for (int i = 0; i < n; i++) {
        if (check(arr[i], k))
            Console.Write(arr[i]+ " ");
    }
}
   
// Driver code
public static void Main(String[] args)
{
   
    int K = 6;
   
    long []arr = { 46656, 64, 256,
                 729, 16, 1000 };
    int n = arr.Length;
   
    printExpo(arr, n, K);
   
}
}
 
// This code is contributed by Princi Singh




<script>
// Javascript implementation to print elements of
// the Array which can be expressed as
// power of some integer to given exponent K
   
 
// Method returns Nth power of A
function nthRoot(A,N)
{
    let xPre = 7;
    
    // Smaller eps, denotes more accuracy
    let eps = 1e-3;
    
    // Initializing difference between two
    // roots by Integer.MAX_VALUE
    let delX = Number.MAX_VALUE;
    
    // x^K denotes current value of x
    let xK = 0;
    
    // loop until we reach desired accuracy
    while (delX > eps) {
    
        // calculating current value from previous
        // value by newton's method
        xK = ((N - 1.0) * xPre
              + A / Math.pow(xPre, N - 1))
             / N;
    
        delX = Math.abs(xK - xPre);
        xPre = xK;
    }
    
    return xK;
}
 
// Function to check
// whether its k root
// is an integer or not
function check(no,k)
{
    let kth_root = nthRoot(no, k);
    let num =  Math.floor(kth_root);
    
    if (Math.abs(num - kth_root) < 1e-4)
        return true;
    
    return false;
}
 
// Function to find the numbers
function printExpo(arr,n,k)
{
    for (let i = 0; i < n; i++) {
        if (check(arr[i], k))
            document.write(arr[i]+ " ");
    }
}
 
// Driver code
let K = 6;
let arr=[46656, 64, 256,
                 729, 16, 1000];
let n = arr.length;
 printExpo(arr, n, K);
 
 
// This code is contributed by patel2127
</script>

Output
46656 64 729







Another Approach:

  1. The code defines a function “isPower” to check if a number is equal to a specific power of a base.
  2. The code defines a function “printPowerElements” to print elements in a vector that can be expressed as a specific power of a base.
  3. The “printPowerElements” function iterates through each element in the input vector.
  4. For each element, it checks if the element can be expressed as a power of a base value ranging from 2 to the square root of the element.
  5. It uses the “isPower” function to perform the check.
  6. If a matching power is found, the element is printed.
  7. In the “main” function, an example vector “arr” and a specific power “K” are declared.
  8. The “printPowerElements” function is called with “arr” and “K”.
  9. The program terminates after the function execution.

Below is the implementation of the above approach:




#include <iostream>
#include <vector>
#include <cmath>
 
// Function to check if a number is equal to a specific power of a base
bool isPower(int num, int base, int power) {
    int result = pow(base, power);  // Calculate the power of the base
    return result == num;  // Check if the calculated result is equal to the number
}
 
// Function to print elements in the vector that are a specific power of a base
void printPowerElements(const std::vector<int>& arr, int K) {
    for (int i = 0; i < arr.size(); i++) {
        bool found = false// Flag to track if a matching power is found
        for (int j = 2; j <= sqrt(arr[i]); j++) {
            // Check if the number in the array can be expressed as a power of 'j' with power 'K'
            if (isPower(arr[i], j, K)) {
                found = true// Found a matching power, set the flag to true
                break// No need to check for other 'j' values, exit the loop
            }
        }
        if (found)
            std::cout << arr[i] << " "// Print the number if a matching power is found
    }
}
 
int main() {
    std::vector<int> arr = {46656, 64, 256, 729, 16, 1000};
    int K = 6;
      
    printPowerElements(arr, K);
     
    return 0;
}




import java.util.ArrayList;
import java.util.List;
 
class Main {
    // Function to check if a number is equal to a specific
  // power of a base
    static boolean isPower(int num, int base, int power) {
        int result = (int) Math.pow(base, power);  // Calculate the power of the base
        return result == num;  // Check if the calculated result is equal to the number
    }
 
    // Function to print elements in the list that are a specific power of a base
    static void printPowerElements(List<Integer> arr, int K) {
        for (int num : arr) {
            boolean found = false// Flag to track if a matching power is found
            for (int j = 2; j <= Math.sqrt(num); j++) {
                // Check if the number in the list can be expressed as a power of 'j' with power 'K'
                if (isPower(num, j, K)) {
                    found = true// Found a matching power, set the flag to true
                    break// No need to check for other 'j' values, exit the loop
                }
            }
            if (found) {
                System.out.print(num + " ");  // Print the number if a matching power is found
            }
        }
    }
 
    public static void main(String[] args) {
        List<Integer> arr = new ArrayList<>();
        arr.add(46656);
        arr.add(64);
        arr.add(256);
        arr.add(729);
        arr.add(16);
        arr.add(1000);
        int K = 6;
 
        printPowerElements(arr, K);
 
        //This Code Is Contributed By Shubham Tiwari.
       
    }
}




import math
 
 
# Function to check if a number is equal to a specific power of a base
def is_power(num, base, power):
    result = pow(base, power)  # Calculate the power of the base
    return result == num  # Check if the calculated result is equal to the number
 
 
# Function to print elements in the list that are a specific power of a base
def print_power_elements(arr, K):
    for i in range(len(arr)):
        found = False  # Flag to track if a matching power is found
        for j in range(2, int(math.sqrt(arr[i])) + 1):
            # Check if the number in the list can be expressed as a power of 'j' with power 'K'
            if is_power(arr[i], j, K):
                found = True  # Found a matching power, set the flag to True
                break  # No need to check for other 'j' values, exit the loop
        if found:
            print(arr[i], end=" "# Print the number if a matching power is found
 
 
if __name__ == "__main__":
    arr = [46656, 64, 256, 729, 16, 1000]
    K = 6
 
    print_power_elements(arr, K)
    # This code is contributed by Shubham Tiwari.




using System;
using System.Collections.Generic;
 
class GFG
{
    // Function to check if a number is equal to a specific power of a base
    static bool IsPower(int num, int baseNum, int power)
    {
        int result = (int)Math.Pow(baseNum, power);  // Calculate the power of the base
        return result == num;  // Check if the calculated result is equal to the number
    }
 
    // Function to print elements in the list that are a specific power of a base
    static void PrintPowerElements(List<int> arr, int K)
    {
        foreach (int num in arr)
        {
            bool found = false// Flag to track if a matching power is found
            for (int j = 2; j <= Math.Sqrt(num); j++)
            {
                // Check if the number in the list can be expressed as a power of 'j' with power 'K'
                if (IsPower(num, j, K))
                {
                    found = true// Found a matching power, set the flag to true
                    break// No need to check for other 'j' values, exit the loop
                }
            }
            if (found)
                Console.Write(num + " ");  // Print the number if a matching power is found
        }
    }
 
    static void Main(string[] args)
    {
        List<int> arr = new List<int> { 46656, 64, 256, 729, 16, 1000 };
        int K = 6;
 
        PrintPowerElements(arr, K);
         
    }
}
//This code is Contributed By Shubham Tiwari 




// Function to check if a number is equal to a specific power of a base
function isPower(num, base, power) {
    let result = Math.pow(base, power); // Calculate the power of the base
    return result === num; // Check if the calculated result is equal to the number
}
 
// Function to print elements in the array that are a specific power of a base
function printPowerElements(arr, K) {
    for (let i = 0; i < arr.length; i++) {
        let found = false; // Flag to track if a matching power is found
        for (let j = 2; j <= Math.sqrt(arr[i]); j++) {
            // Check if the number in the array can be expressed as a power of 'j' with power 'K'
            if (isPower(arr[i], j, K)) {
                found = true; // Found a matching power, set the flag to true
                break; // No need to check for other 'j' values, exit the loop
            }
        }
        if (found) {
            console.log(arr[i] + " "); // Print the number if a matching power is found
        }
    }
}
 
const arr = [46656, 64, 256, 729, 16, 1000];
const K = 6;
 
printPowerElements(arr, K);
 
// This Code Is Contributed By Shubham Tiwari

Output
46656 64 729 







Time Complexity: O(n * sqrt(arr[i]))

Auxiliary Space: O(N)


Article Tags :