Find value of (1^n + 2^n + 3^n + 4^n ) mod 5
You are given an positive integer n. You have to find the value of (1n +2n + 3n + 4n ) mod 5.
Note : Value of n may be very large of order 1015.
Examples:
Input : n = 4
Output : 4
Explanation : (14 + 24 + 34 + 44)mod 5 = (1+16+81+256)mod 5 = 354 mod 5 = 4Input : n = 2
Output : 0
Explanation : (12 + 22 + 32 + 42)mod 5 = (1+4+9+16)mod 5 = 30 mod 5 = 0
Basic Approach : If you will solve this question with a very basic approach of finding value of (1n +2n + 3n + 4n ) and then finding its modulo value for 5, you will certainly get your answer but for the larger value of n we must got wrong answer as you will be unable to store value of (1n +2n + 3n + 4n ) properly.
Better and Proper Approach : Before proceeding to solution lets go through some of periodical properties of power of 2, 3 & 4.
- f(n) = 2n is periodical for n = 4 in terms of last digit. i.e. last digit of 2n always repeat for next 4th value of n. (ex: 2, 4, 8, 16, 32, 64…)
- f(n) = 3n is periodical for n = 4 in terms of last digit. i.e. last digit of 3n always repeat for next 4th value of n.(ex: 3, 9, 27, 81, 243, 729…)
- f(n) = 4n is periodical for n = 2 in terms of last digit. i.e. last digit of 4n always repeat for next 2nd value of n.(ex: 4, 16, 64, 256..)
- 1n is going to be 1 always, independent of n.
So, If we will have a close look for periodicity of f(n) = (1n +2n + 3n + 4n ) we will get that its periodicity is also 4 and its last digits occurs as :
- for n = 1, f(n) = 10
- for n = 2, f(n) = 30
- for n = 3, f(n) = 100
- for n = 4, f(n) = 354
- for n = 5, f(n) = 1300
Observing above periodicity we can see that if (n%4==0) result of f(n)%5 is going to be 4 other wise result = 0. So, rather than calculating actual value of f(n) and then obtaining its value with mod 5 we can easily get result only by examine value of n.
C++
// Program to find value of f(n)%5 #include <bits/stdc++.h> using namespace std; // function for obtaining remainder int fnMod( int n) { // calculate res based on value of n return (n % 4) ? 0 : 4; } // driver program int main() { int n = 43; cout << fnMod(n) << endl; n = 44; cout << fnMod(n); return 0; } |
Java
// Program to find value of f(n)% 5 class GFG { // function for obtaining remainder static int fnMod( int n) { // calculate res based on value of n return (n % 4 != 0 ) ? 0 : 4 ; } // Driver code public static void main (String[] args) { int n = 43 ; System.out.println(fnMod(n)); n = 44 ; System.out.print(fnMod(n)); } } // This code is contributed by Anant Agarwal. |
Python
# program to find f(n) mod 5 def fnMod (n): res = 4 if (n % 4 = = 0 ) else 0 return res # driver section n = 43 print (fnMod(n)) n = 44 print (fnMod(n)) |
C#
// C# Program to find value of f(n) % 5 using System; class GFG { // function for obtaining remainder static int fnMod( int n) { // calculate res based on value of n return (n % 4 != 0) ? 0 : 4; } // Driver code public static void Main () { int n = 43; Console.WriteLine(fnMod(n)); n = 44; Console.Write(fnMod(n)); } } // This code is contributed by nitin mittal. |
PHP
<?php // PHP Program to find value of f(n)%5 // function for obtaining remainder function fnMod( $n ) { // calculate res based // on value of n return ( $n % 4) ? 0 : 4; } // Driver Code { $n = 43; echo fnMod( $n ), "\n" ; $n = 44; echo fnMod( $n ); return 0; } // This code is contributed by nitin mittal. ?> |
Javascript
<script> // JavaScript program to find value of f(n)% 5 // function for obtaining remainder function fnMod(n) { // calculate res based on value of n return (n % 4 != 0) ? 0 : 4; } // Driver Code let n = 43; document.write(fnMod(n) + "<br/>" ); n = 44; document.write(fnMod(n) + "<br/>" ); // This code is contributed by splevel62. </script> |
0 4
Time complexity: O(1)
Auxiliary space: O(1)