#include<bits/stdc++.h> using namespace std; int dx[4]={0,0,-1,1}; int dy[4]={-1,1,0,0}; #define int long long typedef pair<int,int> pii; const int mod=1e9+7; int qmi(int a,int b,int mod) { int res=1; while(b) { if(b&1)res=(res*a)%mod; b>>=1; a=(a*a)%mod; } return res; } void solve() { int w,d; cin>>w>>d; int ans=1; for(int i=0;i<w;i++) { int p,a; cin>>p>>a; if(d==0) { ans*=(a+1); ans%=mod; }else{ int x=qmi(p,d,mod); int x1=(x-1+mod)%mod; int ans1=qmi(x1,mod-2,mod); int ans2=(qmi(x,a+1,mod)-1+mod)%mod; ans=ans*(ans1*ans2%mod)%mod; } } cout<<ans<<endl; } signed main() { int good_luck_to_you; ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); good_luck_to_you=1; //cin>>good_luck_to_you; while(good_luck_to_you--) { solve(); } system("pause"); }
主要思路上述已给,在比赛时没有读清题目,导致浪费很多时间,求的是该数的所有约数的幂次之和,要想到其实一个数的每一个约数都可以由这个数的质因数来表示,所以我们就可以带入公式用等比公式来求出答案。
更正:小费马定理