这就是区分高中生和小学生爸爸的题目吧。
推导扣一个网上的式子吧
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int mod=1e9+7;
4 typedef long long ll;
5 ll a,b,c,d;
6 ll qmod(ll x,ll y)
7 {
8 ll ans=1;
9 while(y)
10 {
11 if(y&1)ans=x*ans%mod;
12 x=x*x%mod;y>>=1;
13 }
14 return ans;
15 }
16 struct numb
17 {
18 ll pow,mul;
19 numb(){pow=mul=0;}
20 }n,m;
21 numb read()
22 {
23 char ch;ch=getchar();numb a;
24 while(ch>'9'||ch<'0')ch=getchar();
25 while(ch<='9'&&ch>='0')
26 {
27 a.mul=(a.mul*10%mod+ch-'0')%mod;
28 a.pow=(a.pow*10%(mod-1)+ch-'0')%(mod-1);
29 ch=getchar();
30 }
31 return a;
32 }
33 int main()
34 {
35 n=read();m=read();
36 scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
37 if(a==1)
38 {
39 b=(c*b%mod*(m.mul-1)%mod+d)%mod;
40 a=c;
41 }
42 else
43 {
44 b=(b*(qmod(a,m.pow-1)-1)%mod*qmod(a-1,mod-2)%mod*c%mod+d)%mod;
45 a=c*qmod(a,m.pow-1)%mod;
46 }
47 if(a==1)
48 {
49 b=(1+b*n.mul%mod)%mod;
50 }
51 else
52 {
53 b=(qmod(a,n.pow)+b*(qmod(a,n.pow)-1)%mod*qmod(a-1,mod-2)%mod)%mod;
54 }
55 printf("%lld\n",(b-d+mod)%mod*qmod(c,mod-2)%mod);
56 return 0;
57 }
来源:oschina
链接:https://my.oschina.net/u/4401856/blog/4245404