📜  数组的元素,可以表示为给定指数K的某个整数的幂

📅  最后修改于: 2021-04-26 05:13:28             🧑  作者: Mango

给定一个大小为N的数组arr []和一个整数K ,任务是打印该数组的所有元素,这些元素可以表示为指数K的某个整数(X)的幂,即X K。

例子:

方法:解决上述问题的主要思想是为数组中的每个数字找到数字的第N个根。然后检查此数字是否为整数。如果是,则打印它,否则跳到下一个数字。

下面是上述方法的实现:

CPP
// C++ implementation to print elements of
// the Array which can be expressed as
// power of some integer to given exponent K
  
#include 
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 untill 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
// 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 untill 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
# Python3 implementation to prelements 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 untiwe 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#
// 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 untill 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


输出:
46656 64 729