算(qbxt)

逆元(费马小定理)+ 快速幂+ 等比数列
这里写图片描述

读题可知,答案是i~n的以 i 为公比的m项的等比数列和的和;

就用到了我们的数学公式:
Sn=a1*(q^n-1)/(q-1)

然后就用到了逆元——费马小定理:
x^(p-1) mod p=1

(q^n-1)/(q-1)mod p那这个式子就等于——
(q^n-1)* (q-1)^-1 * (q-1)^p-1 mod p mod p即
(q^n-1)* (q-1)^p-2 mod p

当然这中间少不了快速幂
代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<queue>
#define LL long long
#define mod 1000000007
using namespace std;
int n,m;
LL ans;
LL fpow(int x,int p)
{
    LL y=1,z=x;
    while(p>1)
    {
        if(p%2==1) 
            y=(y*z)%mod;
        z=(z*z)%mod;
        p/=2;
    }
    z=(y*z)%mod;
    return z;
}
int main()
{
    scanf("%d%d",&n,&m);
    ans+=m;
    for(int i=2;i<=n;i++)
    {
        int k=i;
        ans=(ans+((k*(fpow(k,m)-1))%mod)*fpow(k-1,mod-2))%mod;//费马小定理 
    }
    printf("%lld",ans);
    return 0; 
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值