Description
f[1]=1
f[2]=1
f[3]=(f[2]+f[1])%mod
f[i]=(f[i-1]+f[i-2])%mod;
1<mod<=100000
输出循环节长度
某一个起向右进行到某一个止的一节序列出现,首尾衔接,这一节序列称为循环节
Format
Input
mod的值
Output
循环节长度
Samples
输入数据 1
2
输出数据 1
3
提示 1 1 0 1 1 0 所以循环节是3
#include<bits/stdc++.h> using namespace std; int mod,f[10000010]; struct node { int a,b; friend bool operator <(node xx,node yy) { if(xx.a==yy.a) return xx.b<yy.b; else return xx.a<yy.a; }//得判全不然map认为两个元素相等 }; map<node,int> mp; node temp; int main() { cin>>mod; mp[{1,1}]=1; f[1]=1,f[2]=1; for(int i=3;; i++) { f[i]=(f[i-1]+f[i-2])%mod; temp.a=f[i-1]; temp.b=f[i]; if(mp[temp]!=0) { cout<<i-mp[temp]-1<<endl; return 0; } mp[temp]=i-1; } }
标签:node,temp,mp,int,寻找,循环,P05509,mod From: https://www.cnblogs.com/cutemush/p/17728519.html