【例题&结论】【分治(等比数列二分求和)】NKOJ 3716 数列求和
2016-07-18 13:15
423 查看
NKOJ 3716 数列求和
时间限制 : - MS 空间限制 : 65536 KB
评测说明 : 时限1000ms
问题描述
给出三个整数A,n和p,计算
Sn=(A^0+A^1+A^2+A^3+……+A^(n-1)+A^n) mod p
输入格式
一行,三个整数A,n和p
输出格式
一行,一个整数,表示所求结果
样例输入
2 3 123
样例输出
15
提示
1 <= A,n,p <= 20,000,000
来源 改编自POJ 1845
思路:
对于
Sn=(A^1+A^2+A^3+……+A^(n-1)+A^n) mod p
当n为偶数的时候
s
=(1+A^(n/2))* (A^1+A^2+A^3+……+A^(n/2)) =(1+A^(n/2))*S[n/2]
当n为奇数的时候
s
=(1+A^((n-1)/2+1))* (A^1+A^2+A^3+……+A^(n-1)/2)+A^((n-1)/2+1]
=(1+A^((n-1)/2+1))* S[(n-1)/2] + A^((n-1)/2+1) =(1+A^(n/2+1))*S[n/2] + A^(n/2+1)
然后..递归下去
代码:
时间限制 : - MS 空间限制 : 65536 KB
评测说明 : 时限1000ms
问题描述
给出三个整数A,n和p,计算
Sn=(A^0+A^1+A^2+A^3+……+A^(n-1)+A^n) mod p
输入格式
一行,三个整数A,n和p
输出格式
一行,一个整数,表示所求结果
样例输入
2 3 123
样例输出
15
提示
1 <= A,n,p <= 20,000,000
来源 改编自POJ 1845
思路:
对于
Sn=(A^1+A^2+A^3+……+A^(n-1)+A^n) mod p
当n为偶数的时候
s
=(1+A^(n/2))* (A^1+A^2+A^3+……+A^(n/2)) =(1+A^(n/2))*S[n/2]
当n为奇数的时候
s
=(1+A^((n-1)/2+1))* (A^1+A^2+A^3+……+A^(n-1)/2)+A^((n-1)/2+1]
=(1+A^((n-1)/2+1))* S[(n-1)/2] + A^((n-1)/2+1) =(1+A^(n/2+1))*S[n/2] + A^(n/2+1)
然后..递归下去
代码:
#include<cstdio> #include<iostream> using namespace std; #define ll long long int a,n,p; int power(int a,int b) { int ans=1; a%=p; while(b) { if(b&1) ans=((ll)ans*a)%p; b>>=1; a=((ll)a*a)%p; } return ans; } int getsum(int a,int n) { if(n==1) return a; int s=getsum(a,n>>1); if(n&1) { int t=power(a,n/2+1); return ((ll)s*(t+1)%p+t)%p; } else { int t=power(a,n>>1); return (ll)s*(t+1)%p; } } int main() { scanf("%d%d%d",&a,&n,&p); printf("%d",getsum(a,n)+1); }
相关文章推荐
- Camera viewport
- super
- tomcat8 gzip 优化配置
- python类库[进程subprocess与管道pipe]
- HDU 1839 Delay Constrained Maximum Capacity Path(最短路+二分)
- Maven搭建SpringMVC+Hibernate项目详解
- 扬长避短
- Linux平台下让程序或命令在前台或后台运行
- 轻松使用px为单位开发移动端页面
- 【Get深一度】寄生参数/密勒效应
- jQuery对input中radio的一些操作
- Postgresql 迁移随笔一
- android中ImageView的adjustViewBounds属性的作用
- python第三库安装方法记录
- [LeetCode] 20. Valid Parentheses
- 采用formdata做跨域的、无刷新、带进度条的文件上传
- Apache知识整理
- Unity换装功能
- 最大连续子序和
- 371. Sum of Two Integers