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

posted on 2011-04-11 16:48  宇宙吾心  阅读(400)  评论(0)    收藏  举报

导航