[数论] 51nod 1365 Fib(N) mod Fib(K)
来源:互联网 发布:sqlserver删除历史数据 编辑:程序博客网 时间:2024/06/05 14:06
Description
Solution
先贴几个公式。
这里需要分类讨论
若
若
到这里就可以通过矩阵乘法快速幂得到答案啦!
#include <bits/stdc++.h>using namespace std;const int MOD = 1000000007;typedef long long ll;inline void Add(ll &x, ll b) { x += b; while (x >= MOD) x -= MOD;}inline char get(void) { static char buf[100000], *S = buf, *T = buf; if (S == T) { T = (S = buf) + fread(buf, 1, 100000, stdin); if (S == T) return EOF; } return *S++;}template<typename T>inline void read(T &x) { static char c; x = 0; for (c = get(); c < '0' || c > '9'; c = get()); for (; c >= '0' && c <= '9'; c = get()) x = x * 10 + c - '0';}ll n, i, j, k, f, ans, fk;int test;struct Matrix { ll a[3][3]; inline ll* operator [](ll x) { return a[x]; } inline Matrix(void) { memset(a, 0, sizeof a); } inline friend Matrix operator *(Matrix a, Matrix b) { Matrix x; for (ll i = 1; i <= 2; i++) for (ll j = 1; j <= 2; j++) for (ll k = 1; k <= 2; k++) Add(x[i][j], a[i][k] * b[k][j] % MOD); return x; }};Matrix Fib, I;inline Matrix Pow(Matrix a, ll b) { Matrix c = I; while (b) { if (b & 1) c = c * a; b >>= 1; a = a * a; } return c;}inline ll F(ll x, ll y, ll z = 0) { if ((x & 1) && (y & 1)) return z & 1 ? 1 : -1; return z & 1 ? -1 : 1;}int main(void) { freopen("1.in", "r", stdin); I[1][1] = I[2][2] = 1; Fib[1][1] = Fib[1][2] = Fib[2][1] = 1; read(test); while (test--) { read(n); read(k); i = n / k; j = n % k; if (i & 1) { if (k - j == k) f = 0; else f = Pow(Fib, k - j)[1][2]; fk = Pow(Fib, k)[1][2]; ans = F((i + 1) / 2, k, k - j - 1) * f; if (ans < 0) ans += fk; Add(ans, MOD); printf("%d\n", ans); } else { if (j == k) f = 0; else f = Pow(Fib, j)[1][2]; ans = F(i / 2, k) * f; fk = Pow(Fib, k)[1][2]; if (ans < 0) ans += fk; Add(ans, MOD); printf("%d\n", ans); } } return 0;}
阅读全文
2 0
- [数论] 51nod 1365 Fib(N) mod Fib(K)
- ∑(Fib(N)%Fib(k))(51nod 1399 Fib(N) mod Fib(K) V2)
- mod fib
- FIB
- fib
- FIB
- 【ACMICPC Chengdu Online】1004 数论,类Fib
- Fib数模n的循环节
- Fib数模n的循环节
- FIB表
- Transit-FIB
- fib数列
- gcd fib
- fib函数
- uva 10229 (fib矩阵形式+矩阵快速幂)uva 10518 (fib(n)调用多少次)
- Fib数的算法
- 3936 FIB Query
- 路由表(FIB)详解
- 从0开始学习cuda和caffe源码阅读
- MyBatis 映射器
- 51nod 1711 平均数(二分 树状数组)
- express支持i18n国际化
- Android Camera 正方形预览(二)
- [数论] 51nod 1365 Fib(N) mod Fib(K)
- python练习----基本流程控制
- JQuery lhgdialog的使用
- org.apache.commons.io.FileUtils文件操作解析
- odps词频统计
- jquery easyui combobox required=true设置
- 浅谈语音测试方案(一)
- 长沙智慧滨江项目以BIM技术打造中部地区“曼哈顿”
- Ubuntu安装Adobe flash player