Skip to content
Related Articles

Related Articles

Improve Article
Find sum of a[i]%a[j] for all valid pairs
  • Difficulty Level : Easy
  • Last Updated : 08 Jun, 2021

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:
(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 
 

 

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 <bits/stdc++.h>
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

Javascript




<script>
 
// JavaScript implementation of the approach
 
let mod = 1e9 + 7
 
// Function to return the sum of (a[i] % a[j])
// for all valid pairs
function Sum_Modulo(a, n)
{
    let max = a.sort((a, b) => b - a)[0];
 
    // To store the frequency of each element
    let cnt = new Array(max + 1).fill(0);
 
    // Store the frequency of each element
    for (let i = 0; i < n; i++)
        cnt[a[i]]++;
 
    // To store the required answer
    let ans = 0;
 
    // For all valid pairs
    for (let i = 1; i <= max; i++) {
        for (let j = 1; j <= max; j++) {
 
            // Update the count
            ans = ans + cnt[i] * cnt[j] * (i % j);
            ans = ans % mod;
        }
    }
 
    return (ans);
}
 
// Driver code
 
let a = [1, 2, 3];
let n = a.length;
 
document.write(Sum_Modulo(a, n));
 
// This code is contributed by _saurabh_jaiswal
 
</script>
Output: 
5

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes 




My Personal Notes arrow_drop_up
Recommended Articles
Page :