📜  从除数中查找数字

📅  最后修改于: 2021-04-22 03:17:30             🧑  作者: Mango

给定N个整数的数组arr [] 。整数表示数字X的所有除数,除了1X本身。任务是找到数字X。如果没有这样的元素,则打印-1

例子:

方法:对给定的N个除数进行排序,数字X将是排序数组中的第一个数字*最后一个数字。交叉检查如果X违背了给定语句或通过存储X的所有除数除在另一个阵列1X和如果不是形成阵列和给定阵列不相同,则打印-1,否则打印X。

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
 
// Function that returns X
int findX(int a[], int n)
{
    // Sort the given array
    sort(a, a + n);
 
    // Get the possible X
    int x = a[0] * a[n - 1];
 
    // Container to store divisors
    vector vec;
 
    // Find the divisors of x
    for (int i = 2; i * i <= x; i++)
    {
        // Check if divisor
        if (x % i == 0)
        {
            vec.push_back(i);
            if ((x / i) != i)
                vec.push_back(x / i);
        }
    }
     
    // sort the vec because a is sorted
    // and we have to compare all the elements
    sort(vec.begin(), vec.end());
 
    // if size of both vectors is not same
    // then we are sure that both vectors
    // can't be equal
    if (vec.size() != n)
        return -1;
    else
    {
        // Check if a and vec have
        // same elements in them
        int i = 0;
        for (auto it : vec)
        {
            if (a[i++] != it)
                return -1;
        }
    }
 
    return x;
}
 
// Driver code
int main()
{
    int a[] = { 2, 5, 4, 10 };
    int n = sizeof(a) / sizeof(a[0]);
   
    // Function call
    cout << findX(a, n);
 
    return 0;
}


Java
// Java implementation of the approach
import java.util.*;
 
class GFG {
 
    // Function that returns X
    static int findX(int a[], int n)
    {
        // Sort the given array
        Arrays.sort(a);
 
        // Get the possible X
        int x = a[0] * a[n - 1];
 
        // Container to store divisors
        Vector vec = new Vector();
 
        // Find the divisors of x
        for (int i = 2; i * i <= x; i++)
        {
            // Check if divisor
            if (x % i == 0)
            {
                vec.add(i);
                if ((x / i) != i)
                    vec.add(x / i);
            }
        }
        // sort the vec because a is sorted
        // and we have to compare all the elements
        Collections.sort(vec);
 
        // if size of both vectors is not same
        // then we are sure that both vectors
        // can't be equal
        if (vec.size() != n)
            return -1;
        else {
            // Check if a and vec have
            // same elements in them
            int i = 0;
            for (int it : vec) {
                if (a[i++] != it)
                    return -1;
            }
        }
 
        return x;
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int a[] = { 2, 5, 4, 10 };
        int n = a.length;
 
        // Funciton call
        System.out.print(findX(a, n));
    }
}
 
// This code is contributed by 29AjayKumar


Python3
# Python3 implementation of the approach
# Function that returns X
import math
 
 
def findX(list, int):
    # Sort the given array
    list.sort()
 
    # Get the possible X
    x = list[0]*list[int-1]
 
    # Container to store divisors
    vec = []
 
    # Find the divisors of x
    i = 2
    while(i * i <= x):
        # Check if divisor
        if(x % i == 0):
            vec.append(i)
            if ((x//i) != i):
                vec.append(x//i)
        i += 1
 
    # sort the vec because a is sorted
        # and we have to compare all the elements
    vec.sort()
    # if size of both vectors is not same
    # then we are sure that both vectors
    # can't be equal
    if(len(vec) != int):
        return -1
    else:
        # Check if a and vec have
        # same elements in them
        j = 0
        for it in range(int):
            if(a[j] != vec[it]):
                return -1
            else:
                j += 1
    return x
 
 
# Driver code
a = [2, 5, 4, 10]
n = len(a)
 
# Function call
print(findX(a, n))


C#
// C# implementation of the approach
using System;
using System.Collections.Generic;
 
class GFG {
 
    // Function that returns X
    static int findX(int[] a, int n)
    {
        // Sort the given array
        Array.Sort(a);
 
        // Get the possible X
        int x = a[0] * a[n - 1];
 
        // Container to store divisors
        List vec = new List();
 
        // Find the divisors of a number
        for (int i = 2; i * i <= x; i++)
        {
            // Check if divisor
            if (x % i == 0) {
                vec.Add(i);
                if ((x / i) != i)
                    vec.Add(x / i);
            }
        }
 
        // sort the vec because a is sorted
        // and we have to compare all the elements
        vec.Sort();
 
        // if size of both vectors is not same
        // then we are sure that both vectors
        // can't be equal
        if (vec.Count != n)
        {
            return -1;
        }
        else
        {
            // Check if a and vec have
            // same elements in them
            int i = 0;
            foreach(int it in vec)
            {
                if (a[i++] != it)
                    return -1;
            }
        }
 
        return x;
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        int[] a = { 2, 5, 4, 10 };
        int n = a.Length;
       
        // Function call
        Console.Write(findX(a, n));
    }
}
 
// This code is contributed by 29AjayKumar


输出
20