ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【题解】CF1264F Beautiful Fibonacci Problem

2022-07-27 15:05:29  阅读:140  来源: 互联网

标签:Beautiful 10 12 bmod10 题解 kp Problem times10 equiv


题目链接

讲一个不是官方题解的做法。该做法来自 评论区

题目要求构造 \(a+id\) 为 \(F_{b+ie} \bmod 10^{18}\) 的一个子串。自然考虑把这个子串在一个固定的位置构造。但是打个小一点的表容易发现最后几位是无法构造出所有数字的。

发现 \(a+id\le10^6\),也就是说 \(a+id\) 最多 \(6\) 位。考虑空开 \(F_{b+ie}\) 的最后 \(6\) 位,在倒数 \(7\sim12\) 位构造,即使得 \(a+id=F_{b+ie}/10^6\bmod10^6\)。

令 \(p\) 为斐波那契数列 \(\bmod 10^6\) 的循环周期(\(p=1.5\times10^6\))。思考一下 \(F_{kp+1}/10^6\bmod10^6\) 会形成什么。

Lemma: \(F_{n+m+1}=F_nF_m+F_{n+1}F_{m+1}\)

这是一个经典结论,证明网上应该很多,这里就不赘述了。令 \(n=kp,m=p\) 则可以得到: \(F_{(k+1)p+1}\equiv F_{kp}F_p+F_{kp+1}F_{p+1}\)。由 \(p\) 的定义可得等式右边的第一项不影响结果(\(F_{kp}\equiv F_p\equiv 0\pmod {10^6}\Rightarrow F_{kp}F_p\equiv 0\pmod{10^{12}}\),所以倒数 \(7\sim12\) 位均为 \(0\))。

因此我们得到 \(F_{(k+1)p+1}/10^6\bmod10^6=(F_{kp+1}F_{p+1})/10^6\bmod10^6\)。把 \(F_i\) 分成三块考虑:\(A_i=F_i/10^{12}\),\(B_i=F_i/10^6\bmod10^6\),\(C_i=F_i\bmod10^6\)。显然 \(C_{kp+1}=C_{p+1}=1\)。按照这个方式把 \(F_{kp+1}F_{p+1}\) 展开:

\[\begin{aligned} F_{kp+1}F_{p+1}=&\ (A_{kp+1}\times10^{12}+B_{kp+1}\times10^6+1)(A_{p+1}\times10^{12}+B_{p+1}\times10^6+1)\\ =&\ A_{kp+1}A_{p+1}\times10^{24}+(A_{kp+1}B_{p+1}+A_{p+1}B_{kp+1})\times10^{18}+\\ &(A_{kp+1}+A_{p+1}+B_{kp+1}B_{p+1})\times10^{12}+(B_{kp+1}+B_{p+1})\times10^6+1\\ =&\ \text{sth.}\times10^{12}+(B_{kp+1}+B_{p+1})\times10^6+1 \end{aligned} \]

于是可以得到 \(B_{(k+1)p+1}\equiv B_{kp+1}+B_{p+1}\pmod{10^6}\),即我们想要构造出等差数列的地方满足这个结论。考虑到这个结论中的 \(p\) 可以随便乘上一个整数(只要是周期长度就行),我们可以想办法弄出一个 \(B_{xp+1}=1\),这样我们就可以直接构造 \(b=a\cdot x\cdot p + 1\),\(e=d\cdot x\cdot p\)。

计算得到 \(B_{p+1}=677449\),那么有 \(B_{xp+1}\equiv 677449x\pmod{10^6}\)。那么我们只需要找到 \(677449\) 在 \(\bmod 10^6\) 意义下的逆元。计算出来 \(x=445049\)。

code:

#include <cstdio>

typedef unsigned long long ull;
const ull k = 445049,p = 1.5e6;

ull n,a,d,b,e;

int main() {
    scanf("%llu%llu%llu",&n,&a,&d);
    b = a * k * p + 1,e = d * k * p;
    printf("%llu %llu\n",b,e);
    return 0;
}

标签:Beautiful,10,12,bmod10,题解,kp,Problem,times10,equiv
来源: https://www.cnblogs.com/resorie/p/soln-cf1264f.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有