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; }