zoukankan      html  css  js  c++  java
  • 1013 3的幂的和

    求:3^0 + 3^1 +…+ 3^(N) mod 1000000007
    Input
    输入一个数N(0 <= N <= 10^9)
    Output
    输出:计算结果
    Input示例
    3
    Output示例
    40
    这题题目不难,套用等比数列的前
    n项和的公式便可得知,Sn=a1*(1-q^n)/(1-q)
    要用到快速幂取余和乘法逆元

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    typedef long long ll;
    const int mod=1000000007; 
    long long X,y;
    long long gcd(long long a,long long b)
    {
        int t,d;
        if(b==0)
        {
            X=1;
            y=0;   //不明处1
    return a;
        }
        d=gcd(b,a%b);
        t=X;
        X=y;
        y=t-(a/b)*y;  
    return d;
    }
    ll qpow(long long x,long long a,long long p)
    {
        ll ans=1;
        x=x%p;
        while(a>0)
        {
            if(a&1)
            ans=(ans*x)%p;
            x=(x*x)%p; 
            a>>=1; 
        }
        return ans;
    }  
    int main()
    {
        long long n;
        while(scanf("%lld",&n)!=EOF)
        {
            gcd(2,mod);//用欧几里得扩展地理2mod1000000007的逆元
            if(X<0)
            X+=mod;
            n++; 
            ll ans=(qpow(3,n,mod)-1)*X%mod;
            cout<<ans<<endl; 
        } 
    }
  • 相关阅读:
    css优化总结
    几种常用的图片格式
    css布局总结
    第四章复习题
    4.9,4.10
    4.8
    4.7指针
    libffi
    代理模式
    Redis 汇总
  • 原文地址:https://www.cnblogs.com/NaCl/p/9580135.html
Copyright © 2011-2022 走看看