首页 技术 正文
技术 2022年11月18日
0 收藏 343 点赞 4,202 浏览 975 个字

题意

求\(\sum_0^n{Fb}_i^m \mod (1e9)\)

题解

模1e9时的斐波那契数列循环节太大,考虑把模数质因数分解成\(2^9\cdot5^9\),此时循环节变成768和7812500,可以打表预处理,因为\(2^9\)和\(5^9\)互质,最后答案可以用中国剩余定理合并

代码

#include <bits/stdc++.h>using namespace std;
typedef long long ll;
const int mx = 8e6+5;
int mod[3] = {512, 1953125, 1000000000};
int len[2] = {768, 7812500};
int F[2][mx];
int ans[2][mx];int pow_mod(ll a, ll b, ll p) {
ll ans = 1;
while (b) {
if (b & 1) ans = ans * a % p;
a = a * a % p;
b /= 2;
}
return ans;
}int main() {
F[1][0] = F[0][0] = 0;
F[1][1] = F[0][1] = 1; for (int k = 0; k < 2; k++) {
for (int i = 2; i <= len[k]; i++) {
F[k][i] = (F[k][i-1] + F[k][i-2]);
if (F[k][i] >= mod[k]) F[k][i] -= mod[k];
}
}
int n, m;
scanf("%d%d", &n, &m);
for (int k = 0; k < 2; k++) {
ans[k][0] = 0;
for (int i = 1; i <= len[k]; i++) {
ans[k][i] = (ans[k][i-1] + pow_mod(F[k][i], m, mod[k]));
if (ans[k][i] >= mod[k]) ans[k][i] -= mod[k];
}
} ll a1 = (ans[0][n%len[0]] + 1LL * ans[0][len[0]-1] * (n/len[0]) % mod[0]) % mod[0];
ll a2 = (ans[1][n%len[1]] + 1LL * ans[1][len[1]-1] * (n/len[1]) % mod[1]) % mod[1]; ll res = a1*mod[1]*109 + a2*mod[0]*1537323;//CRT我直接预处理了
res = (res % mod[2] + mod[2]) % mod[2];
printf("%lld\n", res);
return 0;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,909
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,434
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,249
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,060
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,692
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,730