zoukankan      html  css  js  c++  java
  • poj 1286 Necklace of Beads

        这是做的第一道群论题,自然要很水又很裸。注意用long long。

        就是用到了两个定理

        burnside :不等价方案数=每个置换的不动置换方案数的和 / 置换个数

        polya: 一个置换的不动置换方案数=k^(这个置换的循环个数) 

        先看第一个博客再看第二个

        http://cxjyxx.me/?p=198

        http://endlesscount.blog.163.com/blog/static/82119787201221324524202/

        这两个蛮好的,上代码:

    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <iostream>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    
    int n;
    
    long long mi(int a)
    {
        long long ans = 1, zan = 3;
        while (a)
        {
            if (a & 1) ans *= zan;
            zan *= zan;
            a >>= 1;
        }
        return ans;
    }
    
    int gcd(int a, int b)
    {
        if (!b) return a;
        return gcd(b, a%b);
    }
    
    int main()
    {
        scanf("%d", &n);
        while (n != -1)
        {
            if (n == 0)
            {
                printf("0
    ");
                scanf("%d", &n);
                continue;
            }
            int Gcount = 2*n;
            long long ans = 0;
            for (int i = 1; i <= n; ++i)
            ans += mi(gcd(i,n));
            if (n % 2 == 0) ans += mi(n/2)*n/2 + mi(n/2+1)*n/2;
            else ans += mi(n/2+1)*n;
            printf("%I64d
    ", ans / Gcount);
            scanf("%d", &n);
        }
        return 0;
    }
  • 相关阅读:
    高级查询及分页总结
    SQL编程
    线程同步
    创建和启动线程
    错题集04
    错题集03
    错题集02
    错题集
    新闻发布系统
    九大内置对象
  • 原文地址:https://www.cnblogs.com/handsomeJian/p/3954671.html
Copyright © 2011-2022 走看看