Related Articles
Find sum of a[i]%a[j] for all valid pairs
• Difficulty Level : Easy
• Last Updated : 30 Jul, 2019

Given an array arr[] of size N. The task is to find the sum of arr[i] % arr[j] for all valid pairs. Answer can be large. So, output answer modulo 1000000007

Examples:

Input: arr[] = {1, 2, 3}
Output: 5
(1 % 1) + (1 % 2) + (1 % 3) + (2 % 1) + (2 % 2)
+ (2 % 3) + (3 % 1) + (3 % 2) + (3 % 3) = 5

Input: arr[] = {1, 2, 4, 4, 4}
Output: 10

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: Store the frequency of each element and run a nested loop on the frequency array and find the required answer.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;`` ` `#define mod (int)(1e9 + 7)`` ` `// Function to return the sum of (a[i] % a[j])``// for all valid pairs``int` `Sum_Modulo(``int` `a[], ``int` `n)``{``    ``int` `max = *max_element(a, a + n);`` ` `    ``// To store the frequency of each element``    ``int` `cnt[max + 1] = { 0 };`` ` `    ``// Store the frequency of each element``    ``for` `(``int` `i = 0; i < n; i++)``        ``cnt[a[i]]++;`` ` `    ``// To store the required answer``    ``long` `long` `ans = 0;`` ` `    ``// For all valid pairs``    ``for` `(``int` `i = 1; i <= max; i++) {``        ``for` `(``int` `j = 1; j <= max; j++) {`` ` `            ``// Update the count``            ``ans = ans + cnt[i] * cnt[j] * (i % j);``            ``ans = ans % mod;``        ``}``    ``}`` ` `    ``return` `(``int``)(ans);``}`` ` `// Driver code``int` `main()``{``    ``int` `a[] = { 1, 2, 3 };``    ``int` `n = ``sizeof``(a) / ``sizeof``(a[0]);`` ` `    ``cout << Sum_Modulo(a, n);`` ` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach``import` `java.util.*;`` ` `class` `GFG ``{``     ` `static` `int` `mod = (``int``)(1e9 + ``7``);`` ` `// Function to return the sum of (a[i] % a[j])``// for all valid pairs``static` `int` `Sum_Modulo(``int` `a[], ``int` `n)``{``    ``int` `max = Arrays.stream(a).max().getAsInt();`` ` `    ``// To store the frequency of each element``    ``int` `[]cnt=``new` `int``[max + ``1``];`` ` `    ``// Store the frequency of each element``    ``for` `(``int` `i = ``0``; i < n; i++)``        ``cnt[a[i]]++;`` ` `    ``// To store the required answer``    ``long` `ans = ``0``;`` ` `    ``// For all valid pairs``    ``for` `(``int` `i = ``1``; i <= max; i++) ``    ``{``        ``for` `(``int` `j = ``1``; j <= max; j++)``        ``{`` ` `            ``// Update the count``            ``ans = ans + cnt[i] * ``                        ``cnt[j] * (i % j);``            ``ans = ans % mod;``        ``}``    ``}`` ` `    ``return` `(``int``)(ans);``}`` ` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``int` `a[] = { ``1``, ``2``, ``3` `};``    ``int` `n = a.length;`` ` `    ``System.out.println(Sum_Modulo(a, n));``}``}`` ` `// This code is contributed ``// by PrinciRaj1992 `

## Python3

 `# Python3 implementation of the approach``mod ``=` `10``*``*``9` `+` `7`` ` `# Function to return the sum of ``# (a[i] % a[j]) for all valid pairs``def` `Sum_Modulo(a, n):`` ` `    ``Max` `=` `max``(a)`` ` `    ``# To store the frequency of each element``    ``cnt ``=` `[``0` `for` `i ``in` `range``(``Max` `+` `1``)]`` ` `    ``# Store the frequency of each element``    ``for` `i ``in` `a:``        ``cnt[i] ``+``=` `1`` ` `    ``# To store the required answer``    ``ans ``=` `0`` ` `    ``# For all valid pairs``    ``for` `i ``in` `range``(``1``, ``Max` `+` `1``):``        ``for` `j ``in` `range``(``1``, ``Max` `+` `1``):`` ` `            ``# Update the count``            ``ans ``=` `ans ``+` `cnt[i] ``*` `\``                        ``cnt[j] ``*` `(i ``%` `j)``            ``ans ``=` `ans ``%` `mod`` ` `    ``return` `ans`` ` `# Driver code``a ``=` `[``1``, ``2``, ``3``]``n ``=` `len``(a)`` ` `print``(Sum_Modulo(a, n))`` ` `# This code is contributed by Mohit Kumar`

## C#

 `// C# implementation of the approach``using` `System;``using` `System.Linq;``class` `GFG ``{``     ` `static` `int` `mod = (``int``)(1e9 + 7);`` ` `// Function to return the sum of (a[i] % a[j])``// for all valid pairs``static` `int` `Sum_Modulo(``int` `[]a, ``int` `n)``{``    ``int` `max = a.Max();`` ` `    ``// To store the frequency of each element``    ``int` `[]cnt = ``new` `int``[max + 1];`` ` `    ``// Store the frequency of each element``    ``for` `(``int` `i = 0; i < n; i++)``        ``cnt[a[i]]++;`` ` `    ``// To store the required answer``    ``long` `ans = 0;`` ` `    ``// For all valid pairs``    ``for` `(``int` `i = 1; i <= max; i++) ``    ``{``        ``for` `(``int` `j = 1; j <= max; j++)``        ``{`` ` `            ``// Update the count``            ``ans = ans + cnt[i] * ``                        ``cnt[j] * (i % j);``            ``ans = ans % mod;``        ``}``    ``}``    ``return` `(``int``)(ans);``}`` ` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``int` `[]a = { 1, 2, 3 };``    ``int` `n = a.Length;`` ` `    ``Console.WriteLine(Sum_Modulo(a, n));``}``}`` ` `// This code is contributed by 29AjayKumar`
Output:
```5
```

My Personal Notes arrow_drop_up