Skip to content

Latest commit

 

History

History
167 lines (126 loc) · 3.83 KB

File metadata and controls

167 lines (126 loc) · 3.83 KB
comments difficulty edit_url rating source tags
true
Medium
1674
Weekly Contest 248 Q3
Recursion
Math

中文文档

Description

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

Solutions

Solution 1

Python3

class Solution:
    def countGoodNumbers(self, n: int) -> int:
        mod = 10**9 + 7

        def myPow(x, n):
            res = 1
            while n:
                if (n & 1) == 1:
                    res = res * x % mod
                x = x * x % mod
                n >>= 1
            return res

        return myPow(5, (n + 1) >> 1) * myPow(4, n >> 1) % mod

Java

class Solution {
    private int mod = 1000000007;

    public int countGoodNumbers(long n) {
        return (int) (myPow(5, (n + 1) >> 1) * myPow(4, n >> 1) % mod);
    }

    private long myPow(long x, long n) {
        long res = 1;
        while (n != 0) {
            if ((n & 1) == 1) {
                res = res * x % mod;
            }
            x = x * x % mod;
            n >>= 1;
        }
        return res;
    }
}

C++

int MOD = 1000000007;

class Solution {
public:
    int countGoodNumbers(long long n) {
        return (int) (myPow(5, (n + 1) >> 1) * myPow(4, n >> 1) % MOD);
    }

private:
    long long myPow(long long x, long long n) {
        long long res = 1;
        while (n) {
            if ((n & 1) == 1) {
                res = res * x % MOD;
            }
            x = x * x % MOD;
            n >>= 1;
        }
        return res;
    }
};

Go

const mod int64 = 1e9 + 7

func countGoodNumbers(n int64) int {
	return int(myPow(5, (n+1)>>1) * myPow(4, n>>1) % mod)
}

func myPow(x, n int64) int64 {
	var res int64 = 1
	for n != 0 {
		if (n & 1) == 1 {
			res = res * x % mod
		}
		x = x * x % mod
		n >>= 1
	}
	return res
}