Advertisement
Guest User

Untitled

a guest
Jul 10th, 2014
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.94 KB | None | 0 0
  1. #include<iostream>
  2. #include<map>
  3. #include<math.h>
  4. using namespace std;
  5. long long int gcd(long long int a, long long int b)
  6. {
  7. for (;;)
  8. {
  9. if (a == 0) return b;
  10. b %= a;
  11. if (b == 0) return a;
  12. a %= b;
  13. }
  14. }
  15.  
  16. long long int lcm(long long int a, long long int b)
  17. {
  18. long long temp = gcd(a, b);
  19.  
  20. return temp ? (a / temp * b) : 0;
  21. }
  22. int main()
  23. {
  24. int t;
  25. cin>>t;
  26. while(t--)
  27. {
  28. long long n,a[100002],b[100002];
  29. cin>>n;
  30. for(long long i=1;i<=n;i++)
  31. {
  32. cin>>a[i];b[i]=-1;
  33. }
  34. long long group=0,lcmx=1;
  35. for(long long i=1;i<=n;i++)
  36. {
  37. if(b[i]==-1)
  38. {
  39. b[i]=1;
  40. long long temp=a[i],val=i,count=0,ll;val=a[i];
  41. while(1)
  42. {
  43. b[val]=1;count++; if(i==val)ll=count;
  44. val=a[val]; if(temp==val)break;
  45.  
  46. }
  47. ll %= (1000000000)+7;
  48. lcmx=lcm(ll,lcmx);
  49. lcmx%= (1000000000)+7;
  50. }
  51. }
  52.  
  53. cout<<lcmx<<endl;
  54. }
  55. return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement