跳到主要内容
原文144 词数1 分钟

题解:CF2033F Kosuke's Sloth

概述

求斐波那契(Fibonacci)数列中第 n 个能被 k 整除的数的下标。斐波那契数列对 k 取模具有周期性(皮萨诺周期),周期 r 不超过 6k,且能被 k 整除的位置恰以 r 为间隔出现。暴力枚举求出首个被 k 整除的下标 r,则第 n 个的下标为 r 乘 n,对大质数取模输出。

参考资料​

题意简述​

求 Fibonacci 数列中第 nn 个能被 kk 整除的数的下标。

解题思路​

Fibonacci 数列对 kk 取模具有周期性(皮萨诺周期),且周期 r≤6kr\le 6k。

暴力枚举求出周期 rr,则第 nn 个数的下标为 rnrn。

参考代码​

402 Bcpp
#include <bits/stdc++.h>
using namespace std;

using ll=long long;
const int mod=1e9+7;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin>>T;
while(T--)
{
ll n,k;
cin>>n>>k;
n%=mod;
if(k==1)
{
cout<<n<<'\n';
continue;
}
ll f1=1,f2=1,f3=1,cnt=2;
while(f3!=0)
{
f3=(f1+f2)%k;
f1=f2;
f2=f3;
cnt++;
}
cout<<cnt*n%mod<<'\n';
}
return 0;
}