zoukankan      html  css  js  c++  java
  • BZOJ1025:[SCOI2009]游戏

    TO update

    Description

      windy学会了一种游戏。对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应。最开始windy把数字按
    顺序1,2,3,……,N写一排在纸上。然后再在这一排下面写上它们对应的数字。然后又在新的一排下面写上它们
    对应的数字。如此反复,直到序列再次变为1,2,3,……,N。
    如: 1 2 3 4 5 6 对应的关系为 1->2 2->3 3->1 4->5 5->4 6->6
    windy的操作如下
    1 2 3 4 5 6
    2 3 1 5 4 6
    3 1 2 4 5 6
    1 2 3 5 4 6
    2 3 1 4 5 6
    3 1 2 5 4 6
    1 2 3 4 5 6
    这时,我们就有若干排1到N的排列,上例中有7排。现在windy想知道,对于所有可能的对应关系,有多少种可
    能的排数。

    Input

      包含一个整数N,1 <= N <= 1000

    Output

      包含一个整数,可能的排数。

    Sample Input

    【输入样例一】

    3

    【输入样例二】

    10

    Sample Output

    【输出样例一】

    3

    【输出样例二】

    16

    Solution

    就是求所有长度为(n)的置换的循环节长度的种数.

    一个置换的循环节等于它各个循环拆分长度的lcm. 所以问题变为:
    已知(sigma_{i=1}^k a_i = n), 求(lcm{a_i})的种数.

    考虑到

    [lcm{a_i} = prod p_i^{max{alpha_i}} ]

    其中(p_i)为质数. 也就是每个数唯一分解后对指数取max的结果.

    我们可以分开考虑每个质数:

  • 相关阅读:
    Maven入门教程
    认识Java Core和Heap Dump
    [Java IO]03_字符流
    Eclipse 实用技巧
    可变和不可变的区分
    什么猴子补丁待补充
    当退出python时,是否释放全部内存
    解释python中的help()和dir()函数
    在python中是如何管理内存的
    解释一下python中的继承
  • 原文地址:https://www.cnblogs.com/ubospica/p/10289213.html
Copyright © 2011-2022 走看看