zoukankan      html  css  js  c++  java
  • 第 254 场周赛 数组元素的最小非零乘积

    大数真的太太太容易出错了

    其实就是有2^p - 1个数, 每一位上1的个数有2^(p - 1)个, 最小乘积就是 (2^(p - 1)  - 1)个(2^p - 2)相乘 再乘以一个(2^p - 1)

    特别是 long p = (1 << 32);  ❌    正确的写法应该是 long p = ((long)1 << 32);✅ 因为1默认是int类型

    class Solution {
    public:
        const int mm = 1000000007;
        long fast(long x, long p){
            if(p == 0) return 1;
            if(p == 1) return x;
            long t = fast(x, p / 2);
            if(p % 2 == 0){
                return t * t % mm;
            }
            return t * t % mm * x % mm;
        }
        int minNonZeroProduct(int p) {
            //总共p位, 每位上有p个1
            //分成2^p - 1个数,每位加起来有p个1
            //快速幂
            long t = ((long)1 << (p - 1));
            long x = ((long)1 << p) - 2;
            long k = fast(x % mm, t - 1);
            return k * ((((long)1 << p) - 1) % mm) %mm ;
        }
    };
  • 相关阅读:
    php CI框架基础知识
    1206 多表单提交,强类型
    1205 Mvc的Razor语法
    1204 Mvc
    1117 邮件验证
    1115 模板页
    1113 Ajax
    1110 Jquary动画
    1108 Jquary
    1107 Linq高级查询
  • 原文地址:https://www.cnblogs.com/Dancing-Fairy/p/15143058.html
Copyright © 2011-2022 走看看