题意

求 $\displaystyle \sum_{i=1}^n F_i^m $,($1 \leq n\leq 10^9,1 \leq  m\leq 10^3$),答案对 $10^9$ 取模。

分析

显然,斐波那契数列在模意义下是有循环节的。

模 $10^9$ 本身的循环节为 $150000000$,还是很大,没意义。

设答案为求和的结果为 $ans$,根据中国剩余定理,要求 $ans \% p$,可先求 $ans \% p_1$ 和 $ans \% p_2$(其中 $p_1p_2 = p$,且 $p_1,p_2$ 互素),然后再合并回去。

设斐波那契数列模 $p$ 时的循环节长度为 $loop(p)$,$10^9 = 2^9 \cdot 5^9$,易知 $loop(512)=768$,$loop(1953125)=7812500$。

模数只拆成了两部分,甚至不用上中国剩余定理的模板。

#include<bits/stdc++.h>
using namespace std; typedef long long ll;
const ll p = 1e9;
const ll p1 = , loop1 = , inv_p1 = ;
const ll p2 = , loop2 = , inv_p2 = ;
ll n, m; ll qpow(ll a, ll b, ll p)
{
ll ret = ;
while(b)
{
if(b&) ret = ret * a % p;
a = a * a % p;
b >>= ;
}
return ret;
} ll fi(ll n, ll m, ll loop, ll p)
{
if(n == ) return ;
if(n == ) return ;
ll yu = n % loop;
ll ret = , tmp = ;
if(yu == ) tmp=;
if(yu == ) tmp=;
ll a=, b=, c;
for(int i = ;i <= loop;i++)
{
c = (a+b) % p;
a = b;
b = c;
ret = (ret + qpow(c, m, p)) % p;
if(i == yu) tmp = ret;
}
return (ret * (n / loop) % p + tmp) % p;
} int main()
{
scanf("%lld%lld", &n, &m);
ll ans1 = fi(n, m, loop1, p1);
ll ans2 = fi(n, m, loop2, p2);
ll ans = (ans1 * p2 %p * inv_p2 %p + ans2 * p1 % p * inv_p1 %p) % p;
printf("%lld\n", ans);
}

参考链接:https://blog.csdn.net/ACdreamers/article/details/10983813

最新文章

  1. Oracle---------sql 中取值两列中值最大的一列
  2. 微信小程序-WXSS
  3. 最短路径算法之Dijkstra算法(java实现)
  4. 【MVC】关于Action返回结果类型的事儿(下)
  5. C# 窗体间传值方法大汇总
  6. 从零开始学JAVA(01)-JAVA开发环境安装
  7. SqlServer2008 之 应用积累
  8. windows phone 操作 http异步返回结果
  9. 使用Eclipse提供的Axis1.x生成WSDL文件以及Server和Client代码
  10. 基于单个 div 的 CSS 画图
  11. Rx RxJava【Operators】操作符
  12. win8vs2012创建自带sqlServer数据库出错
  13. Roguelike元素对游戏设计的影响
  14. ASP.NET Core 认证与授权[7]:动态授权
  15. Linq基础+Lambda表达式对数据库的增删改及简单查询
  16. [工具]K8tools github/K8工具合集/K8网盘
  17. ORA-12638:Credential retrieval failed(身份证明检索失败)解决方法
  18. componentsSeparatedByString 的注意事项
  19. 修改VS2017模板文件,添加文件头部自定义注释
  20. SAP字段带空格,导致日期转换失败,提示not a vaild month

热门文章

  1. 创建一个用目录分层的Rust应用
  2. Jenkins+maven+gitlab自动化部署之Jenkins系统管理配置(四)
  3. docker 实践七:docker-machine
  4. Spring BeanFactory 与 FactoryBean 的区别
  5. ABP 基于DDD的.NET开发框架 学习(四)时间控件采用datetimepicker注意事项
  6. vue的交互
  7. 【转】Java基础——面试题汇总
  8. 0-1背包问题——回溯法求解【Python】
  9. 快速提交一个项目到github或gitee上
  10. C++ 解决文件重复包含