文章出处:http://blog.youkuaiyun.com/jinbaosite/article/details/72676514?utm_source=itdadao&utm_medium=referral
题意
求:3^0 + 3^1 +…+ 3^(N) mod 1000000007
解题思路
由等比数列的前n相和,我们可以得到
3n+1−12%1000000007
我们知道AB%C≠A%CB%C%C和(A∗B)%C=(A%C∗B%C)%C
所以我们要将除法转为乘法,引入乘法逆元。
乘法逆元:如果x与y的积除以z所得的余数为1,即xy = 1 (mod z),则称x和y对于模数z来说互为逆元。
假定(B∗X)%C=1则
AB%C=AB∗1%C=AB%C∗1%C=AB%C∗(B∗X)%C=(AB∗B∗X)%C=(A∗X)%C
在本题中,2*500000004 = 1 (mod 1000000007),所以500000004是2对于1000000007的逆元。则
3n+1−12%1000000007=(3n+1−1)∗500000004%1000000007
对于ab%c,采用快速幂运算即可。
本文介绍了一种计算等比数列前n项和的方法,并通过快速幂运算结合乘法逆元解决取模问题。具体地,给出了计算3^0+3^1+…+3^(N)mod1000000007的C++实现。
827

被折叠的 条评论
为什么被折叠?



