1969. 数组元素的最小非零乘积
思路:单纯找规律找出来的,观察前三个样例,会发现如下规律
虽然找到了规律,但是代码写的还是漏洞百出;
1.建议都使用long long类型
2.答案要求的是取余之前的最小值,这里的指数2^(p-1)-1,推荐直接用位运算得到,而不要对其用快速幂qmi(),从而导致进行取模运算
3.默认的常数都为int型,所以1<<(p-1)要改为(long long)1<<(p-1)
class Solution {
public:
long long qmi(long long a,long long k,long long mod){
long long res=1;
while(k){
if(k&1) res=res*a%mod;
k>>=1;
a=a*a%mod;
}
return res;
}
int minNonZeroProduct(int p) {
long long sum;
long long mod=1e9+7;
sum=(qmi(2,p,mod)-1+mod)%mod;
long long t=(sum-1+mod)%mod;
long long k=((long long)1<<(p-1))-1;//注意
t=qmi(t,k,mod);
return (int)(t*sum%mod);
}
};