Open In App

Remainder with 7 for large numbers

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Given a large number as a string, find the remainder of number when divided by 7.

Examples : 

Input : num = 1234
Output : 2

Input : num = 1232
Output : 0

Input : num = 12345
Output : 4
Recommended Practice

Simple Approach is to convert a string into number and perform the mod operation. But this approach will not work for long strings.

There exists an approach that works for large numbers also. 

Below are the steps. Let the given number be “num” 

  1. We use a series 1, 3, 2, -1, -3, -2 to find the remainder (Intuition behind the series is discussed below).
  2. Initialize the result as 0.
  3. Traverse num from end and above series from beginning. For every traversed digit, multiply it with next digit of series, and add the multiplication to result.
  4. Keep repeating step 3 while there are more digits to process. If there are more than 6(number of terms in series) digits, then start traversing the series from beginning.
  5. After each step, we keep doing result = result % 7 to make sure that result remains less than 7.

Illustration : 

let us take above Example where number is 12345. 

We reverse the number from end and series from 
the beginning and keep adding multiplication to
the result.
(12345 % 7) = (5*1 + 4*3 + 3*2 + 2*(-1) + 1*(-3)) % 7
            = (5 + 12 + 6 - 2 - 3)%7
            = (18) % 7
            = 4
hence 4 will be the remainder when we divide
the number 12345 by 7. 

How does this series formula work? 
Below is the intuition behind the series 

1  % 7 = 1
10 % 7 = 3
100 % 7 = 2
1000 % 7 = 6 = (-1) % 7
10000 % 7 = 4 = (-3) % 7
100000 % 7 = 5 = (-2) % 7

The series repeats itself for larger powers
1000000 % 7 = 1
10000000 % 7 = 3
..............
...............

The above property of modular division with 7 and 
associative properties of modular arithmetic are 
the basis of the approach used here.

Implementation:

C++




// C++ program to find remainder of a large
// number when divided by 7.
#include<iostream>
using namespace std;
 
/* Function which returns Remainder after dividing
   the number by 7 */
int remainderWith7(string num)
{
    // This series is used to find remainder with 7
    int series[] = {1, 3, 2, -1, -3, -2};
 
    // Index of next element in series
    int series_index = 0;
 
    int result = 0;  // Initialize result
 
    // Traverse num from end
    for (int i=num.size()-1; i>=0; i--)
    {
        /* Find current digit of nun */
        int digit = num[i] - '0';
 
        // Add next term to result
        result += digit * series[series_index];
 
        // Move to next term in series
        series_index = (series_index + 1) % 6;
 
        // Make sure that result never goes beyond 7.
        result %= 7;
    }
 
    // Make sure that remainder is positive
    if (result < 0)
      result = (result + 7) % 7;
 
    return result;
}
 
/* Driver program */
int main()
{
    string str = "12345";
    cout << "Remainder with 7 is "
         << remainderWith7(str);
    return 0;
}


Java




// Java program to find remainder of a large
// number when divided by 7.
 
class GFG
{
    // Function which return Remainder
    // after dividingthe number by 7
    static int remainderWith7(String num)
    {
        // This series is used to
        // find remainder with 7
        int series[] = {1, 3, 2, -1, -3, -2};
     
        // Index of next element in series
        int series_index = 0;
     
        // Initialize result
        int result = 0;
     
        // Traverse num from end
        for (int i = num.length() - 1; i >= 0; i--)
        {
            /* Find current digit of nun */
            int digit = num.charAt(i) - '0';
     
            // Add next term to result
            result += digit * series[series_index];
     
            // Move to next term in series
            series_index = (series_index + 1) % 6;
     
            // Make sure that result never goes beyond 7.
            result %= 7;
        }
     
        // Make sure that remainder is positive
        if (result < 0)
        result = (result + 7) % 7;
     
        return result;
    }
     
    // Driver code
    public static void main (String[] args)
    {
        String str = "12345";
        System.out.print("Remainder with 7 is "
                          +remainderWith7(str));
    }
}
 
// This code is contributed by Anant Agarwal.


Python3




# Python3 program to find remainder of
# a large number when divided by 7.
 
# Function which return Remainder
# after dividing the number by 7
def remainderWith7(num):
     
    # This series is used to
    # find remainder with 7
    series = [1, 3, 2, -1, -3, -2];
     
    # Index of next element
    # in series
    series_index = 0;
     
    # Initialize result
    result = 0;
     
    # Traverse num from end
    for i in range((len(num) - 1), -1, -1):
         
        # Find current digit of num
        digit = ord(num[i]) - 48;
         
        # Add next term to result
        result += digit * series[series_index];
         
        # Move to next term in series
        series_index = (series_index + 1) % 6;
         
        # Make sure that result
        # never goes beyond 7.
        result %= 7;
     
    # Make sure that remainder
    # is positive
     
    if (result < 0):
        result = (result + 7) % 7;
    return result;
 
# Driver Code
str = "12345";
print("Remainder with 7 is",
       remainderWith7(str));
 
# This code is contributed by mits


C#




// C# program to find the remainder of
// a large number when divided by 7.
using System;
 
class GFG
{
    // Function which return Remainder
    // after dividingthe number by 7
    static int remainderWith7(String num)
    {
        // This series is used to
        // find remainder with 7
        int []series = {1, 3, 2, -1, -3, -2};
     
        // Index of next element in series
        int series_index = 0;
     
        // Initialize result
        int result = 0;
     
        // Traverse num from end
        for (int i = num.Length - 1; i >= 0; i--)
        {
            /* Find current digit of nun */
            int digit = num[i] - '0';
     
            // Add next term to result
            result += digit * series[series_index];
     
            // Move to next term in series
            series_index = (series_index + 1) % 6;
     
            // Make sure that result never goes beyond 7.
            result %= 7;
        }
     
        // Make sure that remainder is positive
        if (result < 0)
        result = (result + 7) % 7;
     
        return result;
    }
     
    // Driver code
    public static void Main ()
    {
        String str = "12345";
        Console.Write("Remainder with 7 is " +
                         remainderWith7(str));
    }
}
 
// This code is contributed by nitin mittal.


PHP




<?php
// PHP program to find remainder of
// a large number when divided by 7.
 
/* Function which return Remainder
   after dividing the number by 7 */
function remainderWith7($num)
{
     
    // This series is used to
    // find remainder with 7
    $series = array(1, 3, 2, -1, -3, -2);
 
    // Index of next element
    // in series
    $series_index = 0;
 
    // Initialize result
    $result = 0;
 
    // Traverse num from end
    for($i = strlen($num) - 1; $i >= 0; $i--)
    {
         
        // Find current digit of num
        $digit = $num[$i] - '0';
 
        // Add next term to result
        $result += $digit *
                   $series[$series_index];
 
        // Move to next term in series
        $series_index = ($series_index + 1) % 6;
 
        // Make sure that result
        // never goes beyond 7.
        $result %= 7;
    }
 
    // Make sure that remainder
    // is positive
    if ($result < 0)
    $result = ($result + 7) % 7;
 
    return $result;
}
 
// Driver Code
{
    $str = "12345";
    echo "Remainder with 7 is ",
         (remainderWith7($str));
    return 0;
}
 
// This code is contributed by nitin mittal.
?>


Javascript




<script>
 
// Javascript program to find remainder of a large
// number when divided by 7.
 
/* Function which returns Remainder after dividing
the number by 7 */
function remainderWith7(num)
{
 
    // This series is used to find remainder with 7
    series = [1, 3, 2, -1, -3, -2]
 
    // Index of next element in series
    var series_index = 0;
 
    var result = 0; // Initialize result
 
    // Traverse num from end
    for (var i = num.length - 1; i >= 0; i--)
    {
     
        /* Find current digit of nun */
        var digit = num[i] - '0';
 
        // Add next term to result
        result += digit * series[series_index];
 
        // Move to next term in series
        series_index = (series_index + 1) % 6;
 
        // Make sure that result never goes beyond 7.
        result %= 7;
    }
 
    // Make sure that remainder is positive
    if (result < 0)
    result = (result + 7) % 7;
 
    return result;
}
 
/* Driver program */
var str = "12345";
document.write("Remainder with 7 is " + remainderWith7(str));
 
// This code is contributed by oob2000.
 
</script>


Output

Remainder with 7 is 4

Time complexity : O(n) 
Auxiliary Space : O(1)



Last Updated : 05 Jul, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads