All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g1901_2000.s1922_count_good_numbers.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g1901_2000.s1922_count_good_numbers;

// #Medium #Math #Recursion #2022_05_14_Time_1_ms_(87.11%)_Space_40.6_MB_(68.56%)

/**
 * 1922 - Count Good Numbers\.
 *
 * Medium
 *
 * A digit string is **good** if the digits **(0-indexed)** at **even** indices are **even** and the digits at **odd** indices are **prime** (`2`, `3`, `5`, or `7`).
 *
 * *   For example, `"2582"` is good because the digits (`2` and `8`) at even positions are even and the digits (`5` and `2`) at odd positions are prime. However, `"3245"` is **not** good because `3` is at an even index but is not even.
 *
 * Given an integer `n`, return _the **total** number of good digit strings of length_ `n`. Since the answer may be large, **return it modulo** 109 + 7.
 *
 * A **digit string** is a string consisting of digits `0` through `9` that may contain leading zeros.
 *
 * **Example 1:**
 *
 * **Input:** n = 1
 *
 * **Output:** 5
 *
 * **Explanation:** The good numbers of length 1 are "0", "2", "4", "6", "8".
 *
 * **Example 2:**
 *
 * **Input:** n = 4
 *
 * **Output:** 400
 *
 * **Example 3:**
 *
 * **Input:** n = 50
 *
 * **Output:** 564908303
 *
 * **Constraints:**
 *
 * *   1 <= n <= 1015
**/
public class Solution {
    public int countGoodNumbers(long n) {
        long mod = 1000000007L;
        long result = n % 2 == 0 ? 1L : 5L;

        long base = 20L;
        long time = n / 2L;
        while (time > 0) {
            if (time % 2L > 0) {
                result *= base;
                result %= mod;
            }
            time /= 2L;
            base = base * base % mod;
        }
        return (int) result;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy