1. 程式人生 > >NYOJ127 星際之門(一)(圖論Cayley公式)

NYOJ127 星際之門(一)(圖論Cayley公式)

星際之門(一)

時間限制:3000 ms  |  記憶體限制:65535 KB 難度:3
描述

公元3000年,子虛帝國統領著N個星系,原先它們是靠近光束飛船來進行旅行的,近來,X博士發明了星際之門,它利用蟲洞技術,一條蟲洞可以連通任意的兩個星系,使人們不必再待待便可立刻到達目的地。

帝國皇帝認為這種發明很給力,決定用星際之門把自己統治的各個星系連結在一起。

可以證明,修建N-1條蟲洞就可以把這N個星系連結起來。

現在,問題來了,皇帝想知道有多少種修建方案可以把這N個星系用N-1條蟲洞連結起來?

輸入
第一行輸入一個整數T,表示測試資料的組數(T<=100)
每組測試資料只有一行,該行只有一個整數N,表示有N個星系。(2<=N<=1000000)
輸出
對於每組測試資料輸出一個整數,表示滿足題意的修建的方案的個數。輸出結果可能很大,請輸出修建方案數對10003取餘之後的結果。
樣例輸入
2
3
4
樣例輸出
3
16
/*
百度一下,你就知道
cayley公式+快速冪 加油!!!
Time:2014-10-17 17:32
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int power_mod(int a,int b,int c){
	int ans=1;a=a%c;
	while(b>0){
		if(b&1)ans=(ans*a)%c;
		
		a=(a*a)%c;
		b>>=1;
	}
	return ans;
}
int main(){
	int T,N;
	scanf("%d",&T);
	while(T--){
		scanf("%d",&N);
		if(N<=2)printf("1\n");
		else printf("%d\n",power_mod(N,N-2,10003));
	}	
return 0;
}