1969. 数组元素的最小非零乘积

31 阅读1分钟

1969. 数组元素的最小非零乘积

image.png

image.png

image.png

前面部分 都是 1

class Solution:
    def minNonZeroProduct(self, p: int) -> int:
        # 
        #  (2^p - 2) ^(2^(p-1) - 1) * (2^p - 1)
        mod = 10 ** 9 + 7
        return pow(2 ** p - 2, 2 ** (p - 1) - 1, mod) * (2 ** p - 1) % mod
class Solution {
public:

    long long fastPow(long long x, long long n, long long mod){
        long long ret = 1;
        for (; n != 0; n >>= 1){
            if (n & 1){
                ret = ret * x % mod;
            }
            x = x * x % mod;
        }
        return ret;
    }
    // 主模块
    int minNonZeroProduct(int p) {
        long long mod = 1e9 + 7;
        long long x = fastPow(2, p, mod) - 1;
        long long y = (long long) 1 << (p - 1);
        return fastPow(x - 1,y - 1, mod) * x % mod;
    }
};