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) =10Entrada: 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>
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