1. 程式人生 > 其它 >poj2409(純Polya定理)

poj2409(純Polya定理)

技術標籤:Polya定理演算法

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int mod=9937;
int n,m;
int exgcd(int a,int b,int&x,int&y){//歐幾里得擴充套件
	if(b==0){
		x=1;y=0;
		return a;
	}
	int r=exgcd(b,a%b,x,y);
	int t=x;
	x=y;
	y=t-
a/b*y; return r; } int pow(int a,int b){//快速冪 int ans=1; while(b){ if(b&1){ ans=(ans*a); } a=(a*a); b>>=1; } return ans; } int main(){ while(cin>>m>>n){ int ans=0; int x=0,y=0; if(n==0&&m==0)break; for(int i=1;i<=n;i++){ ans+=pow(m,exgcd(n,i,x,y))
; } if(n&1){ ans+=n*pow(m,(n+1)/2); }else{ ans+=n*(pow(m,n/2)+pow(m,n/2+1))/2; } cout<<ans/(2*n)<<endl; } return 0; }