求和

Problem - 1003 (hdu.edu.cn)

n次求逆元,线性求逆元

要用long long,不然很容易炸

每次叠加,不停的取模

必须互素,必须为质数。

不足的不会出现0,而后面的则满足取模的意义

#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
typedef long long ll;
const ll N=1e5+520;
ll inv[N];
ll n,m,res;
ll qmi(ll a,ll b)
{
	ll ans=1;
	while(b)
	{
		if(b&1) ans=ans*a%mod;
		b/=2;
		a=a*a%mod;
	}
	return ans;
}
void get_inv()
{
	inv[1]=1;
	for(int i=2;i<=N;i++)
	{
		inv[i]=(ll)(mod-mod/i)*inv[mod%i]%mod;
	}
}
int main()
{
	get_inv();
	while(~scanf("%lld%lld",&n,&m))
	{
		res=m%mod;
		for(int i=2;i<=n;i++)
		{
			res=(res+(i*(qmi(i,m)-1)%mod*inv[i-1])%mod)%mod;
		}	
		cout<<res<<endl;
	}
	return 0;
 } 

  

posted @ 2021-07-14 16:47  mofan552  阅读(54)  评论(0)    收藏  举报