POJ2154 - Color

POJ2154 - Click Here

  

Description

  Beads of N colors are connected together into a circular necklace of N beads (N<=1000000000). Your job is to calculate how many different kinds of the necklace can be produced. You should know that the necklace might not use up all the N colors, and the repetitions that are produced by rotation around the center of the circular necklace are all neglected.

  You only need to output the answer module a given number P.

  

Input

  The first line of the input is an integer X (X <= 3500) representing the number of test cases. The following X lines each contains two numbers N and P (1 <= N <= 1000000000, 1 <= P <= 30000), representing a test case.

  

Output

  For each test case, output one line containing the answer.

  

Solutions

  POJ2409的加强版。

  

  和POJ2409不同的是,没有了翻转的置换,因此仅需要考虑旋转的置换。显然,旋转的置换成群

  注意到对于每个置换,置换前的元素与置换后的元素的差值是定值,因此循环分解后,每个循环的长度是一样的。

  

  现在设这个定值为$k$,每个循环的长度为$l$,则易得$n \mid kl$。

  最小满足这个式子的$l=\frac{n}{gcd(k,n)}$,对应的循环数为$\frac{n}{l}=gcd(k,n)$

  再套用Polya可得$ans = \frac{1}{n} \sum_{k=1}^n n^{gcd(k,n)} = \sum_{k=1}^n n^{gcd(k,n)-1}$

  

  暴力做的话,时间复杂度是$O(XN \, log \, N)$

  考虑进一步优化,利用BZOJ2705的思路可将该式转换为$ans = \sum_{d \mid n} n^{d-1} \phi(\frac{n}{d})$

  

  暴力求欧拉函数的时间复杂度为$O(XN)$

  但由于约数个数不会太多,因此这个上界十分宽松,大概可以认为是$O(X\sqrt N)$的。

  

CODE

CODE - Click Here

本站总访问量次 | 本站访客数人次

Powered by Hexo | Designed by iTimeTraveler | Refined by CSHwang