leetcode周赛---关于找规律+快速幂

Posted C_YCBX Py_YYDS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode周赛---关于找规律+快速幂相关的知识,希望对你有一定的参考价值。

题目

审题

根据题目所给的样例,我们可以得出规律,每个01组成的数组中,除了全是1的,其余均通过替换可以得到一个 000...1 和一个 11111...0 ,所以我们只需要得出 111...0 的个数,最后的结果便是它的个数次方,再乘以全是1的数,最后再取模。
那么问题来了,这个次方太大了!!最多可能是 2^59 次方次,看来必须用快速幂的方式处理了!

注意还有一大坑:MOD取模的时候,注意防止溢出,得取多次摸,而取多次模之前,不能使得其他因他而产生的数而改变!

提交代码

class Solution {
public:
    const int MOD = 1e9+7;
    using ll = long long;
    int minNonZeroProduct(int p) {
    //计算111...11,由于后面两个数字依仗这个数字,所以该数不能在此取模
        ll x1 = (ll)pow(2,p)  -1;
    //得出111..10
        ll x2 = (x1-1)%MOD;
    //得出次数k
        ll k = x1/2;
        int res = 1;
        //快速幂得出结果
        while(k){
            if(k&1){
                res = (res*x2)%MOD;
            }
            x2 = (x2*x2)%MOD;
            k = k>>1;
        }
        //注意防止乘积溢出,给x1再取一次幂
        res = ((ll)res*(x1%MOD))%MOD;
        return res;
    }
};

以上是关于leetcode周赛---关于找规律+快速幂的主要内容,如果未能解决你的问题,请参考以下文章

hdu1061(2015-N1):1.快速幂;2.找规律

51nod-1537 1537 分解(矩阵快速幂+找规律)

hdu 2604 Queuing dp找规律 然后矩阵快速幂。坑!!

HDU 5793 A Boring Question (找规律 : 快速幂+乘法逆元)

[LeetCode] 次幂判断问题

HDU1005 找规律 or 循环点 or 矩阵快速幂