poj 1721
置换。
代码:
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
int a[41];
int b[1001];
int c[1001];
int d[1001];
int n;
void read(){
// ifstream cin("in.txt");
int i,j,k,ans,m,num,s;
for(i=4;i<=40;i+=2)
a[i]=1;
for(i=3;i<=40;i+=2)
if(a[i]==0)
for(j=i*2;j<=40;j+=i)
a[j]=1;
cin>>num>>n;
m=num;
ans=1;
for(i=2;i*i<=m;i++)
if(a[i]==0&&m%i==0)
{
j=0;
while(m%i==0)
{
j++;
m/=i;
}
ans*=pow(1.*i,1.*j-1)*(i-1);
}
if(m>1) ans*=m-1;
n%=ans;
for(i=1;i<=num;i++)
cin>>b[i];
if(n>0)
n=ans-n;
else
{
for(i=1;i<=num;i++)
cout<<b[i]<<endl;
return;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=num;j++)
c[j]=b[b[j]];
for(j=1;j<=num;j++)
b[j]=c[j];
}
for(i=1;i<=num;i++)
cout<<b[i]<<endl;
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号