Date:2019/10/26
→
P
e
r
f
e
c
t
−
B
e
g
i
n
i
n
g
\to Perfect- Begining
→Perfect−Begining
这道题是等比数列求和,再加上快速幂的板子;
其实挺简单的,就是当时做题的时候没有看懂最后一行
Math
先祭上等比数列求和的公式
- 定义式: a n a n − 1 = q ( n ≥ 2 , a n − 1 ≠ 0 , q ≠ 0 \frac {a_n}{a_{n-1}} = q(n\geq 2, a_{n-1} \not = 0,q\not= 0 an−1an=q(n≥2,an−1=0,q=0
- 通项公式: a n = a 1 × q n − 1 a_n = a_1\times q^{n-1} an=a1×qn−1
- 求和公式
S n = n ∗ a 1 ( q ≠ 1 ) S_n = n *a_1(q\not= 1) Sn=n∗a1(q=1)
S n = a 1 ( 1 − q n ) 1 − q S_n= \frac {a_1(1-q^n)} { 1-q} Sn=1−qa1(1−qn)
而在这道题中,
a
1
a_1
a1是给定的,是1;
而
q
n
q_n
qn也可以通过快速幂的板子来实现;
所以把已知条件带入求和公式,正好和题目给定的条件符合(我就说怎么原来不知道给定的是什么意思)
1
a
(
m
o
d
p
)
=
a
p
−
2
(
m
o
d
p
)
\frac {1}{a}(mod p) = a^{p-2}(mod p)
a1(modp)=ap−2(modp)
1
2
(
m
o
d
1
e
9
+
7
)
=
a
1
e
9
+
7
−
2
(
m
o
d
1
e
9
+
7
)
\frac {1}{2}(mod\:1e9+7) = a^{1e9+7-2}(mod\:1e9+7)
21(mod1e9+7)=a1e9+7−2(mod1e9+7)
=
500000004
m
o
d
1
e
9
+
7
= 500000004 \;mod \; 1e9+7
=500000004mod1e9+7
AC code
啥都不说了,我太菜了
水题都切不了,等比公式都不知道
//Author:PhilFan;
//等比数列求和公式+快速幂板子题
#include<bits/stdc++.h>
using namespace std;
const long long mod = 1e9+7;
int n;
long long ans = 1,a;
void quick(){
long long tmp = 3;
while(n>0){
if(n&1) ans *= (ans*tmp) % mod;
tmp = (tmp*tmp) % mod;
n >>= 1;
}
}
int main()
{
scanf("%d",&n);
n+=1;
quick();
a = (500000004 % mod) * (ans-1) % mod;
printf("%lld",a);
return 0;
}
→ P e r f e c t E n d i n g \to Perfect \:Ending →PerfectEnding