美文网首页LeetCode
[51Nod]1013 3的幂的和

[51Nod]1013 3的幂的和

作者: 闭门造折 | 来源:发表于2019-08-08 23:15 被阅读0次

很有代表性的一道题,用到了快速幂和逆元

题干

求:3^0 + 3^1 +...+ 3^(N) mod 1000000007

快速幂

参考资料《基础算法—快速幂详解》
快速幂的原理是,计算m ^ k次方的时候,通过k的二进制值将k拆分成2^i + 2^j + ...,通过不断地平方运算快速计算m的k次方

逆元

这个真是个奇妙的东西
以1013题为例,整个证明过程如下:

    原式 = [1 - 3^(n+1)] / (1 - 3) = [3^(n+1) - 1] / 2
[1] A = 3^(n+1) - 1
[2] B = 2
    则原式 = A / B
    设[3] (B * x) % C = 1
[4] C = mod
    由[3][4]可得:
(B * x) % mod = 1
            x = (mod + 1) / B [5]
    由[2][5]可得
x = (mod + 1) / 2
原式 % mod = (A / B) % mod
           = (A / B  *  B * x) % mod
           = (A * x) % mod 

完整代码

#include<iostream>

using namespace std;

int mod = 1000000007;
long long power3(int n){
    long long res = 1;
    long long k = 3;
    while(n){
        if(n & 1){
            res = (res * k) % mod;
        }
        k = (k * k) % mod;
        n /= 2;
    }
    return res;
}
int main(){
    int n;
    cin >> n;
    long long a = power3(n + 1) - 1;
    long long x = (mod + 1) / 2;
    cout << (a * x) % mod << endl;
    return 0;
}

相关文章

  • [51Nod]1013 3的幂的和

    很有代表性的一道题,用到了快速幂和逆元 题干 求:3^0 + 3^1 +...+ 3^(N) mod 100000...

  • 郑州轻工业大学oj题解(c语言)-1005: 整数幂

    1005: 整数幂 题目描述 输入3个整数,输出它们的1次幂、2次幂和3次幂。 输入 输入3整数,用空格隔开。 输...

  • 3的幂

    给定一个整数,写一个函数来判断它是否是 3 的幂次方。 示例 1: 输入: 27输出: true示例 2: 输入:...

  • 3的幂

    题目描述 难度级别:简单 给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返...

  • 3 - Easy - 3的幂

    给定一个整数,写一个函数来判断它是否是 3 的幂次方。 示例 1: 输入: 27输出: true示例 2: 输入:...

  • 2017-7-25 数学 笔记

    power:幂次 eg:three to the fourth power: 3的四次幂 Quantity A ....

  • 胶卷规格大全

    胶卷号码名称片幅规格起始年份退出年份其它名称和特点注释1013½x3½" 注释18951956Agfa H-6柯...

  • k8s imanager从1013版本升级到1020版本

    搭建1013版本环境 使用离线安装包安装k8s和nfs 安装子节点 创建云套件 发布实例服务 1013升级...

  • 这也能掰?杨幂是要被恋爱多少次?

    自从杨幂和刘恺威官宣离婚之后,杨幂的感情生活就没平静过,网友们对杨幂是真爱啊,想要大幂幂尽快找到新的幸福。 杨幂和...

  • 342-4的幂

    给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4的幂次方。 同3的幂,3的幂,最简单就是循环...

网友评论

    本文标题:[51Nod]1013 3的幂的和

    本文链接:https://www.haomeiwen.com/subject/ubdfjctx.html