📌  相关文章
📜  查找所有将最大数组元素相除的数字

📅  最后修改于: 2021-06-26 15:19:23             🧑  作者: Mango

给定一个由N个数字组成的数组,任务是打印所有大于1的数字,这些数字除以数组元素的最大值。

例子

方法:

  • 使用哈希存储每个数组元素的所有因子的计数。我们可以在O(sqrt N)中找到所有数量因素。
  • 遍历所有因素,并找到除以数字的最大数组元素的数量。
  • 再次重新遍历所有因子,并打印出现次数最多的因子。

下面是上述方法的实现。

C++
// C++ program to print all the numbers
// that divides maximum of array elements
#include 
using namespace std;
  
// Function that prints all the numbers
// which divides maximum of array elements
void printNumbers(int a[], int n)
{
  
    // hash to store the number of times
    // a factor is there
    unordered_map mpp;
  
    for (int i = 0; i < n; i++) {
        int num = a[i];
  
        // find all the factors
        for (int j = 1; j * j <= num; j++) {
  
            // if j is factor of num
            if (num % j == 0) {
                if (j != 1)
                    mpp[j]++;
  
                if ((num / j) != j)
                    mpp[num / j]++;
            }
        }
    }
  
    // find the maximum times
    // it can divide
    int maxi = 0;
    for (auto it : mpp) {
        maxi = max(it.second, maxi);
    }
  
    // print all the factors of
    // numbers which divides the
    // maximum array elements
    for (auto it : mpp) {
        if (it.second == maxi)
            cout << it.first << " ";
    }
}
  
// Driver Code
int main()
{
  
    int a[] = { 12, 15, 27, 20, 40 };
    int n = sizeof(a) / sizeof(a[0]);
    printNumbers(a, n);
}


Java
// Java program to print all the numbers
// that divides maximum of array elements
import java.util.*;
  
class GFG
{
      
// Function that prints all the numbers
// which divides maximum of array elements
static void printNumbers(int a[], int n)
{
  
    // hash to store the number of times
    // a factor is there
    Map mpp = new HashMap<>();
  
    for (int i = 0; i < n; i++) 
    {
        int num = a[i];
  
        // find all the factors
        for (int j = 1; j * j <= num; j++) 
        {
  
            // if j is factor of num
            if (num % j == 0) 
            {
                if (j != 1)
                {
                    if(mpp.containsKey(j))
                    {
                        mpp.put(j, mpp.get(j) + 1);
                    }
                    else
                    {
                        mpp.put(j, 1);
                    }
                }
                  
                if ((num / j) != j)
                {
                    if(mpp.containsKey(num / j))
                    {
                        mpp.put(num / j, mpp.get(num / j) + 1);
                    }
                    else
                    {
                        mpp.put(num / j, 1);
                    }
                }
            }
        }
    }
  
    // find the maximum times
    // it can divide
    int maxi = 0;
    for (Map.Entry it : mpp.entrySet())
    {
        maxi = Math.max(it.getValue(), maxi);
    }
  
    // print all the factors of
    // numbers which divides the
    // maximum array elements
    for (Map.Entry it : mpp.entrySet())
    {
        if (it.getValue() == maxi)
            System.out.print(it.getKey() + " ");
    }
}
  
// Driver Code
public static void main(String[] args) 
{
    int a[] = { 12, 15, 27, 20, 40 };
    int n = a.length;
    printNumbers(a, n);
}
}
  
// This code is contributed by Princi Singh


Python3
# Python3 program to print all the numbers
# that divides maximum of array elements
  
# Function that prints all the numbers
# which divides maximum of array elements
def printNumbers(a, n):
  
    # hash to store the number of times
    # a factor is there
    mpp = dict()
  
    for i in range(n):
        num = a[i]
  
        # find all the factors
        for j in range(1, num + 1):
  
            if j * j > num:
                break
  
            # if j is factor of num
            if (num % j == 0):
                if (j != 1):
                    mpp[j]=mpp.get(j, 0) + 1
  
                if ((num // j) != j):
                    mpp[num // j]=mpp.get(num//j, 0) + 1
              
    # find the maximum times
    # it can divide
    maxi = 0
    for it in mpp:
        maxi = max(mpp[it], maxi)
  
    # print all the factors of
    # numbers which divides the
    # maximum array elements
    for it in mpp:
        if (mpp[it] == maxi):
            print(it,end=" ")
      
# Driver Code
a = [12, 15, 27, 20, 40 ]
n = len(a)
printNumbers(a, n)
  
# This code is contributed by mohit kumar


C#
// C# program to print all the numbers
// that divides maximum of array elements
using System;
using System.Collections.Generic; 
  
class GFG
{
      
// Function that prints all the numbers
// which divides maximum of array elements
static void printNumbers(int []a, int n)
{
  
    // hash to store the number of times
    // a factor is there
    Dictionary mpp = new Dictionary();
  
    for (int i = 0; i < n; i++) 
    {
        int num = a[i];
  
        // find all the factors
        for (int j = 1; j * j <= num; j++) 
        {
  
            // if j is factor of num
            if (num % j == 0) 
            {
                if (j != 1)
                {
                    if(mpp.ContainsKey(j))
                    {
                        var v = mpp[j];
                        mpp.Remove(j);
                        mpp.Add(j, v + 1);
                    }
                    else
                    {
                        mpp.Add(j, 1);
                    }
                }
                  
                if ((num / j) != j)
                {
                    if(mpp.ContainsKey(num / j))
                    {
                        var v = mpp[num/j];
                        mpp.Remove(num/j);
                        mpp.Add(num / j, v + 1);
                    }
                    else
                    {
                        mpp.Add(num / j, 1);
                    }
                }
            }
        }
    }
  
    // find the maximum times
    // it can divide
    int maxi = 0;
    foreach(KeyValuePair it in mpp)
    {
        maxi = Math.Max(it.Value, maxi);
    }
  
    // print all the factors of
    // numbers which divides the
    // maximum array elements
    foreach(KeyValuePair it in mpp)
    {
        if (it.Value == maxi)
            Console.Write(it.Key + " ");
    }
}
  
// Driver Code
public static void Main(String[] args) 
{
    int []a = { 12, 15, 27, 20, 40 };
    int n = a.Length;
    printNumbers(a, n);
}
}
  
// This code is contributed by 29AjayKumar


输出:
5 2 3 4

时间复杂度: O(N * sqrt(max(array element)))

如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。