Back to all solutions
#1969 - Minimum Non-Zero Product of the Array Elements
Problem Description
You are given a positive integer p. Consider an array nums (1-indexed) that consists of the integers in the inclusive range [1, 2p - 1] in their binary representations. You are allowed to do the following operation any number of times:
- Choose two elements x and y from nums.
- Choose a bit in x and swap it with its corresponding bit in y. Corresponding bit refers to the bit that is in the same position in the other integer.
For example, if x = 1101 and y = 0011, after swapping the 2nd bit from the right, we have x = 1111 and y = 0001.
Find the minimum non-zero product of nums after performing the above operation any number of times. Return this product modulo 109 + 7.
Note: The answer should be the minimum product before the modulo operation is done.
Solution
/**
* @param {number} p
* @return {number}
*/
var minNonZeroProduct = function(p) {
const MOD = 1000000007n;
const maxVal = (1n << BigInt(p)) - 1n;
const halfCount = (maxVal - 1n) / 2n;
const base = maxVal - 1n;
function pow(base, exp, mod) {
let result = 1n;
base = base % mod;
while (exp > 0n) {
if (exp & 1n) result = (result * base) % mod;
base = (base * base) % mod;
exp >>= 1n;
}
return result;
}
return Number((maxVal * pow(base, halfCount, MOD)) % MOD);
};