Program to calculate the number of odd days in given number of years - GeeksforGeeks

01 Apr, 2021
Given an integer N, the task is to find the number of odd days in the years from 1 to N. Odd Days: Number of odd days refer to those days that are left in a certain year(s) when it’s days gets converted into weeks. Say, an ordinary year has 365 days, that is 52 weeks and one odd day. This means, out of the 365 days in an ordinary year, 364 days will get converted into 52 weeks and one day will remain. This one day is referred to as 1 odd day.  
Simply the modulus total number of days by 7(days in a week) gives us the number of odd days.
It’s value lies between 0 to 6 only. [0, 6]
Leap Year: Every year divisible either by 400 or by 4 but not 100
Ordinary Year: Years Except Leap Years
Every Ordinary Year has 1 odd day.
Every Leap Year has 2 odd days.
Examples:  
Input: N = 8 Output: 3 Out of the 8 years, 4 and 8 are the only leap years. (6 x 1) + (2 x 2) = 10 i.e. 1 week and 3 daysInput: N = 400 Output: 0  
 
Approach:  
Count number of ordinary years and number of leap years out of given N years.Calculate the overall number of days.Print the modulo(7) of the total number of days.
Count number of ordinary years and number of leap years out of given N years.
Calculate the overall number of days.
Print the modulo(7) of the total number of days.
Below is the implementation of the above approach: 
C++
Java
Python3
C#
PHP
Javascript
// C++ implementation of the approach#include <iostream>using namespace std; // Function to return the count of odd daysint oddDays(int N){     // Count of years divisible    // by 100 and 400    int hund1 = N / 100;    int hund4 = N / 400;     // Every 4th year is a leap year    int leap = N >> 2;    int ord = N - leap;     // Every 100th year is divisible by 4    // but is not a leap year    if (hund1) {        ord += hund1;        leap -= hund1;    }     // Every 400th year is divisible by 100    // but is a leap year    if (hund4) {        ord -= hund4;        leap += hund4;    }     // Total number of extra days    int days = ord + leap * 2;     // modulo(7) for final answer    int odd = days % 7;     return odd;} // Driver codeint main(){     // Number of days    int N = 100;    cout << oddDays(N);     return 0;}
// Java implementation of the approachclass GFG {     // Function to return the count of odd days    static int oddDays(int N)    {        // Count of years divisible        // by 100 and 400        int hund1 = N / 100;        int hund4 = N / 400;         // Every 4th year is a leap year        int leap = N >> 2;        int ord = N - leap;         // Every 100th year is divisible by 4        // but is not a leap year        if (hund1 > 0) {            ord += hund1;            leap -= hund1;        }         // Every 400th year is divisible by 100        // but is a leap year        if (hund4 > 0) {            ord -= hund4;            leap += hund4;        }         // Total number of extra days        int days = ord + leap * 2;         // modulo(7) for final answer        int odd = days % 7;         return odd;    }     // Driver code    public static void main(String args[])    {         // Number of days        int N = 100;        System.out.print(oddDays(N));    }}
# Python3 implementation of the approach # Function to return the count of odd daysdef oddDays(N):     # Count of years divisible    # by 100 and 400    hund1 = N // 100    hund4 = N // 400     # Every 4th year is a leap year    leap = N >> 2    ordd = N - leap     # Every 100th year is divisible by 4    # but is not a leap year    if (hund1):        ordd += hund1        leap -= hund1     # Every 400th year is divisible by 100    # but is a leap year    if (hund4):        ordd -= hund4        leap += hund4     # Total number of extra days    days = ordd + leap * 2     # modulo(7) for final answer    odd = days % 7     return odd # Driver code # Number of daysN = 100print(oddDays(N)) # This code is contributed# by mohit kumar
// C# implementation of the approachusing System; class GFG{     // Function to return the count of odd days    static int oddDays(int N)    {        // Count of years divisible        // by 100 and 400        int hund1 = N / 100;        int hund4 = N / 400;         // Every 4th year is a leap year        int leap = N >> 2;        int ord = N - leap;         // Every 100th year is divisible by 4        // but is not a leap year        if (hund1 > 0)        {            ord += hund1;            leap -= hund1;        }         // Every 400th year is divisible by 100        // but is a leap year        if (hund4 > 0)        {            ord -= hund4;            leap += hund4;        }         // Total number of extra days        int days = ord + leap * 2;         // modulo(7) for final answer        int odd = days % 7;         return odd;    }     // Driver code    static void Main()    {         // Number of days        int N = 100;        Console.WriteLine(oddDays(N));    }} // This code is contributed by mits
<?php// PHP implementation of the approach // Function to return the count of odd daysfunction oddDays($N){     // Count of years divisible    // by 100 and 400    $hund1 = floor($N / 100);    $hund4 = floor($N / 400);     // Every 4th year is a leap year    $leap = $N >> 2;    $ord = $N - $leap;     // Every 100th year is divisible by 4    // but is not a leap year    if ($hund1)    {        $ord += $hund1;        $leap -= $hund1;    }     // Every 400th year is divisible by 100    // but is a leap year    if ($hund4)    {        $ord -= $hund4;        $leap += $hund4;    }     // Total number of extra days    $days = $ord + $leap * 2;     // modulo(7) for final answer    $odd = $days % 7;     return $odd;} // Driver code // Number of days$N = 100; echo oddDays($N); // This code is contributed by Ryuga?>
<script> // JavaScript implementation of the approach    // Function to return the count of odd days    function oddDays(N) {        // Count of years divisible        // by 100 and 400        var hund1 = N / 100;        var hund4 = N / 400;         // Every 4th year is a leap year        var leap = N >> 2;        var ord = N - leap;         // Every 100th year is divisible by 4        // but is not a leap year        if (hund1 > 0) {            ord += hund1;            leap -= hund1;        }         // Every 400th year is divisible by 100        // but is a leap year        if (hund4 > 0) {            ord -= hund4;            leap += hund4;        }         // Total number of extra days        var days = ord + leap * 2;         // modulo(7) for final answer        var odd = days % 7;         return odd;    }     // Driver code              // Number of days        var N = 100;        document.write(oddDays(N).toFixed()); // This code is contributed by todaysgaurav </script>
5
 
mohit kumar 29
Mithun Kumar
ankthon
todaysgaurav
school-programming
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program to print prime numbers from 1 to N.
Segment Tree | Set 1 (Sum of given range)
Modular multiplicative inverse
Count all possible paths from top left to bottom right of a mXn matrix
Fizz Buzz Implementation
Check if a number is Palindrome
Program to multiply two matrices
Merge two sorted arrays with O(1) extra space
Generate all permutation of a set in Python
Count ways to reach the n'th stair