Codeforces 1264F - Beautiful Fibonacci Problem(猜结论+找性质)
一道名副其实(beautiful)的结论题。
首先看到这道设问方式我们可以很自然地想到套用斐波那契数列的恒等式,注意到这里涉及到 \(F_{a+id}\),因此考虑斐波那契数列组合恒等式 \(F_{m+n+1}=F_mF_{n}+F_{m+1}F_{n+1}\),具体证明戳这里,这里就不再赘述了。
注意到此题还涉及后 \(18\) 位,也就是要将斐波那契数列的各种运算放到模 \(10^{18}\) 意义下进行,因此我们可以考虑找一下斐波那契数列在模 \(10^{18}\) 意义下的循环节,打个表可以发现斐波那契数列在模 \(10,100,1000,10000,100000,\cdots\) 意义下的循环节恰好是 \(60,300,1500,15000,150000\),后面依次乘 \(10\)(From my 题解 of Codeforces 193E)因此斐波那契数列在模 \(10^k(k\ge 3)\) 意义下的循环节为 \(1.5\times 10^k\),也就是说一定有 \(F_{1.5\times 10^k·i}\equiv 0\pmod{10^k}\),我们在下文中令 \(N=12\times 10^k\)(官方题解是 \(12\times 10^k\),至于为什么这么做我也不知道,反正对于我这种菜鸡而言,这种难度的题我只能搬官方题解/ll/wq),那么显然 \(1.5\times 10^k\mid N\),因此可以得到第一个非常 trivial 的结论:
Observation \(1\). \(F_{Ni}\equiv 0\pmod{10^k}(i\in\mathbb{N}_+)\)。
接下来我们考虑再来观察一些性质,可以注意到 \(F_{2N+1}=F_{N+1}^2+F_N^2\equiv F_{N+1}^2\pmod{10^{2k}}\),\(F_{3N+1}=F_{2N+1}F_{N+1}+F_{2N}F_N\equiv F_{2N+1}F_{N+1}\equiv F_{N+1}^3\pmod{10^{2k}}\),如此归纳下去可以得到一个普遍性的结论:
Observation \(2\). \(F_{xN+1}\equiv F_{N+1}^x\pmod{10^{2k}},x\in\mathbb{N}_+\)
接下来考虑探究一下这个 \(F_{N+1}\) 又有什么性质,有一个我也不知道怎么推出来(有哪位好心的鸽鸽教教蒟蒻这东西怎么证明啊 qwq/kel)的性质:
Observation \(3\). \(F_{N+1}\) 可以写成 \(8\times 10^k·t+1\) 的形式,其中 \(t\perp 10\)
证明不会
因此我们有 \(F_{xN+1}=F_{N+1}^x=(8\times 10^k·t+1)^x\),而我们暴力二项式定理将这东西展开就会发现平方项以上模 \(10^{2k}\) 都等于 \(0\),因此我们只用保留 \(1\) 次项和 \(0\) 次项即可,即
Observation \(4\). \(F_{xN+1}\equiv 8\times 10^k·t·x+1\pmod{10^{2k}}\)
接下来回到原问题,我们显然希望对每个 \(v=a+ix,i\in\mathbb{Z}\cap[0,n)\) 找到一个 \(p\) 满足 \(F_p\equiv v·10^u+q\pmod{10^{18}}\),其中 \(u\le 12,q<10^{u}\),这样原问题显然就做完了,因为这样从 \(10^u\) 位开始往后数一定可以得到 \(v\)。由于我们这些操作要放在模 \(10^{18}\) 意义下进行,因此我们取 \(k=9\),此时 \(N=1.2\times 10^{10}\),我们考虑令 \(X=125·t^{-1}·a\bmod{10^9},Y=125·t^{-1}·d\bmod{10^9}\),其中 \(t^{-1}\) 表示 \(t\) 在模 \(10^9\) 意义下的逆元,那么我们构造 \(b=XN+1,e=YN\) 符合题意,因为:
符合我们刚才的构造。
一句话来说就是 \(b=368131125a\bmod 10^9·1.2\times 10^{10}+1,e=368131125d\bmod 10^9+1.2\times 10^{10}\)
于是我们就做完了这个难度 3.5k 的题(
代码(只有短短的 8 行):
#include <cstdio>
int n,a,d;
unsigned long long m=368131125,mod=1e9,x=1.2e10;
int main(){
scanf("%d%d%d",&n,&a,&d);
printf("%llu %llu\n",m*a%mod*x+1,m*d%mod*x);
return 0;
}
原文地址:https://www.cnblogs.com/ET2006/p/Codeforces-1264F.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法