Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<map>
- #include<math.h>
- using namespace std;
- long long int gcd(long long int a, long long int b)
- {
- for (;;)
- {
- if (a == 0) return b;
- b %= a;
- if (b == 0) return a;
- a %= b;
- }
- }
- long long int lcm(long long int a, long long int b)
- {
- long long temp = gcd(a, b);
- return temp ? (a / temp * b) : 0;
- }
- int main()
- {
- int t;
- cin>>t;
- while(t--)
- {
- long long n,a[100002],b[100002];
- cin>>n;
- for(long long i=1;i<=n;i++)
- {
- cin>>a[i];b[i]=-1;
- }
- long long group=0,lcmx=1;
- for(long long i=1;i<=n;i++)
- {
- if(b[i]==-1)
- {
- b[i]=1;
- long long temp=a[i],val=i,count=0,ll;val=a[i];
- while(1)
- {
- b[val]=1;count++; if(i==val)ll=count;
- val=a[val]; if(temp==val)break;
- }
- ll %= (1000000000)+7;
- lcmx=lcm(ll,lcmx);
- lcmx%= (1000000000)+7;
- }
- }
- cout<<lcmx<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement