文章目录
- 题目描述
- 解析
- 代码
题目描述
解析
应该是哈希表板子题了
选一个1e6左右的质数进行处理即可
其实本质就是链前
没啥特别新鲜的
为什么要写呢?
因为这个东西很早之前看的时候完全没有看懂。。。
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
typedef unsigned long long ull;
const int N = 3e6+100;
const ll mod=1e6+3;
ll a,b,c;
int fi[N],cnt=-1;
ll num[N],tot=0;
struct node{int to,nxt;
}p[N];
void addline(int x,int y){p[++cnt]=(node){y,fi[x]};fi[x]=cnt;
}
bool find(ll x){int o=x%mod;for(int i=fi[o];~i;i=p[i].nxt){int to=p[i].to;if(num[to]==x) return true;}return false;
}
void put(ll x){int o=x%mod;num[++tot]=x;addline(o,tot);
}
int main(){memset(fi,-1,sizeof(fi));scanf("%lld%lld%lld",&a,&b,&c);ll now=1;put(now);for(int i=1;i<=2e6;i++){now=(a*now+now%b)%c;if(find(now)){printf("%d",i);return 0;}put(now);}printf("-1");return 0;
}
/*
3
1 2 3
4 5 6
7 8 9
5 6 7
8 9 1
2 3 4
*/