• 【数论】【Polya定理】poj1286 Necklace of Beads


    Polya定理:设G={π1,π2,π3........πn}是X={a1,a2,a3.......an}上一个置换群,用m中颜色对X中的元素进行涂色,那么不同的涂色方案数为:1/|G|*(mC(π1)+mC(π2)+mC(π3)+...+mC(πk)). 其中C(πk)为置换πk的循环节的个数。

    Polya定理的基础应用。

    你得算出旋转和翻转时,每种置换的循环节数。

    旋转时,每种置换的循环节数为gcd(n,i);

    翻转时,若n为奇数,共有n个循环节数为n+1>>1的置换,

    若n为偶数,共有n/2个循环节数为n+2>>1的置换和n/2个循环节数为n>>1的置换。

    #include<cstdio>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    typedef long long ll;
    int n;
    ll Pow(int x,int p){
    	ll res=1;
    	for(int i=1;i<=p;++i){
    		res*=(ll)x;
    	}
    	return res;
    }
    int main(){
    	while(1){
    		scanf("%d",&n);
    		if(n==-1){
    			break;
    		}
    		if(n==0){
    			puts("0");
    			continue;
    		}
    		ll sum=0;
    		for(int i=1;i<=n;++i){
    			sum+=Pow(3,__gcd(n,i));
    		}
    		if(n&1){
    			sum+=(ll)n*Pow(3,n+1>>1);
    		}
    		else{
    			sum+=(ll)(n>>1)*Pow(3,n+2>>1);
    			sum+=(ll)(n>>1)*Pow(3,n>>1);
    		}
    		cout<<sum/(2ll*(ll)n)<<endl;
    	}
    	return 0;
    }
  • 相关阅读:
    java的第八次作业
    软件工程第三次作业——关于软件质量保障初探
    java的第七次作业
    java的第六次作业
    20194688 自动生成四则运算题第一版报告
    软件工程第一次作业
    vertical-align
    行高(line-height)
    文本对齐方式(text-align)
    文字样式属性
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/6680449.html
Copyright © 2020-2023  润新知