Maximizar Modulo Sum posible desde una array

Dado un arreglo arr[] que consta de N enteros positivos, la tarea es encontrar el valor máximo de ∑(M mod arr[i]) , donde arr[i] es cualquier elemento del arreglo, para un entero no negativo M .

Ejemplos: 

Entrada: arr[] = {3, 4, 6} 
Salida: 10 
Explicación: Para M = 11, (11 mod 3) + (11 mod 4) + (11 mod 6) =10

Entrada: arr[]={7, 46, 11, 20, 11} 
Salida: 90

 

Enfoque: siga los pasos a continuación para resolver el problema:

  • Dado que A mod B es el resto cuando A se divide por B , entonces el valor máximo de la expresión ∑(M mod arr[i]) es: 

(M mod Arr[0]) + (M mod Arr[1]) +. . . + (M mod Arr[N-1]) = (Arr[0] − 1) + (Arr[1] − 1) + · · · + (Arr[N-1]− 1)

  • Considerando K = Arr[0] × Arr[1] × ···· × Arr[n – 1] , entonces (K mod Arr[i]) = 0 para cada i en el rango [0, N – 1]
  • Por lo tanto, ((K − 1) mod Arr[i]) = Arr[i] − 1. Por lo tanto, para M = K – 1 , se puede obtener el resultado óptimo.

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ Program to implement
// the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to calculate maximum modulo
// sum possible from a given array
int MaximumModuloSum(int Arr[], int N)
{
    // Stores the sum
    int sum = 0;
 
    // Traverse the array
    for (int i = 0; i < N; i++) {
        sum += Arr[i] - 1;
    }
 
    return sum;
}
 
// Driver Code
int main()
{
    int arr[] = { 3, 4, 6 };
    int N = sizeof(arr) / sizeof(arr[0]);
    cout << MaximumModuloSum(arr, N);
 
    return 0;
}

Java

// Java Program to implement
// the above approach
 
import java.io.*;
 
class GFG {
    public static int MaximumModuloSum(int Arr[], int N)
    {
       
        // Stores the sum
        int sum = 0;
 
        // Traverse the array
        for (int i = 0; i < N; i++) {
            sum += Arr[i] - 1;
        }
        return sum;
    }
    public static void main(String[] args)
    {
        int arr[] = { 3, 4, 6 };
        int N = 3;
        System.out.println(MaximumModuloSum(arr, N));
    }
}
 
// This code is contributed by aditya7409.

Python3

# Python 3 Program to implement
# the above approach
 
# Function to calculate maximum modulo
# sum possible from a given array
def MaximumModuloSum( Arr, N):
 
    # Stores the sum
    sum = 0;
 
    # Traverse the array
    for i in range( N ):
        sum += Arr[i] - 1;
     
    return sum;
 
# Driver Code
if __name__ == "__main__":
   
    arr = [ 3, 4, 6 ];
    N = len(arr)
    print(MaximumModuloSum(arr, N))
 
    # This code is contributed by chitranayal.

C#

// C# program for the above approach
using System;
class GFG
{
 
  public static int MaximumModuloSum(int[] Arr, int N)
  {
 
    // Stores the sum
    int sum = 0;
 
    // Traverse the array
    for (int i = 0; i < N; i++) {
      sum += Arr[i] - 1;
    }
    return sum;
  }
 
  // Driver code
  static void Main()
  {
    int[] arr = { 3, 4, 6 };
    int N = 3;
    Console.WriteLine(MaximumModuloSum(arr, N));
  }
}
 
// This code is contributed by susmitakundugoaldanga.

Javascript

<script>
 
// Javascript Program to implement
// the above approach
 
// Function to calculate maximum modulo
// sum possible from a given array
    function MaximumModuloSum(Arr, N)
    {
 
        // Stores the sum
        var sum = 0;
 
        // Traverse the array
        for (i = 0; i < N; i++)
        {
            sum += Arr[i] - 1;
        }
        return sum;
    }
 
    // Driver code
    var arr = [ 3, 4, 6 ];
    var N = 3;
    document.write(MaximumModuloSum(arr, N));
 
// This code is contributed by umadevi9616
</script>
Producción: 

10

 

Complejidad temporal: O(N) 
Espacio auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por 18bhupenderyadav18 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *