zoukankan      html  css  js  c++  java
  • poj 2409 Let it Bead【polya定理+burnside引理】

    两种置换
    旋转:有n种,分别是旋转1个2个……n个,旋转i的循环节数位gcd(i,n)
    翻转:分奇偶,对于奇数个,只有一个珠子对一条边的中点,循环节数为n/2+1;对于偶数个,有珠子对珠子和边对边,循环节个数为n/2+1个和n/2个
    然后用polya定理即可

    #include<iostream>
    #include<cstdio>
    using namespace std;
    long long n,k,ans;
    long long ksm(long long a,long long b)
    {
    	long long r=1;
    	while(b)
    	{
    		if(b&1)
    			r=r*a;
    		a=a*a;
    		b>>=1;
    	}
    	return r;
    }
    long long gcd(long long a,long long b)
    {
    	return !b?a:gcd(b,a%b);
    }
    int main()
    {
    	while(scanf("%d%d",&k,&n)&&k+n)
    	{
    		ans=(n&1)?ksm(k,n/2+1)*n:ksm(k,n/2+1)*n/2+ksm(k,n/2)*n/2;
    		for(int i=1;i<=n;i++)
    			ans+=ksm(k,gcd(i,n));
    		printf("%lld
    ",ans/2/n);
    	}
    	return 0;
    }
    
  • 相关阅读:
    Python学习资料
    异常
    I/O
    Python3+迭代器与生成器
    python标准数据类型
    人工智能、机器学习和深度学习
    原地排序和复制排序
    序列化和Json
    登陆加密小程序
    hashlib模块加密用法
  • 原文地址:https://www.cnblogs.com/lokiii/p/9261823.html
Copyright © 2011-2022 走看看