[关闭]
@994495jj 2017-07-17T14:14:34.000000Z 字数 805 阅读 752

cfgym101252D

201707 (ACM)思维


题意

题解

代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int, int> pii;
  5. typedef vector<int> vi;
  6. #define fi first
  7. #define se second
  8. #define mp make_pair
  9. #define pb push_back
  10. #define rep(i, a, b) for(int i=(a); i<(b); i++)
  11. #define sz(a) (int)a.size()
  12. //---------------
  13. const int N=2e7+1;
  14. ll a,b,c;
  15. void upd(ll &x) {
  16. x=(a*x+x%b)%c;
  17. }
  18. int main() {
  19. freopen("input.txt","r",stdin);
  20. freopen("output.txt","w",stdout);
  21. while(~scanf("%lld%lld%lld",&a,&b,&c)) {
  22. ll xn=1;
  23. rep(i,1,N) upd(xn);
  24. ll now=1;
  25. int len=-1;
  26. rep(i,1,N-1) {
  27. upd(now);
  28. if(now==xn) {
  29. len=i;
  30. }
  31. }
  32. if(len==-1) {
  33. puts("-1");
  34. continue;
  35. }
  36. len=N-1-len;
  37. ll p1=1,p2=1;
  38. rep(i,1,len+1) upd(p2);
  39. int ans=-1;
  40. rep(i,len,N+1) {
  41. if(p1==p2) {
  42. ans=i;
  43. break;
  44. }
  45. upd(p1);upd(p2);
  46. }
  47. printf("%d\n",ans);
  48. }
  49. return 0;
  50. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注