题目描述

$T$ 组询问,用 $n$ 种颜色去染 $n$ 个点的环,旋转后相同视为同构。求不同构的环的个数模 $p$ 的结果。 $T\le 3500,n\le 10^9,p\le 30000$ 。


题解

Polya定理+欧拉函数

根据 poj2409 中得到的结论,答案为:

$\frac{\sum\limits_{i=1}^nn^{\gcd(i,n)}}n=\sum\limits_{i=1}^nn^{\gcd(i,n)-1}$

由于 $n$ 有 $10^9$ 之大,因此考虑优化这个式子。

枚举 $\gcd(i,n)$ ,则有:

$Ans=\sum\limits_{d|n}n^{d-1}\sum\limits_{j=1}^{\frac nd}[\gcd(j·d,n)==d]\\\ \ \ \ \ \ \ =\sum\limits_{d|n}n^{d-1}\sum\limits_{j=1}^{\frac nd}[\gcd(j,\frac nd)==1]\\\ \ \ \ \ \ \ =\sum\limits_{d|n}n^{d-1}\varphi(\frac nd)\\\ \ \ \ \ \ \ =\sum\limits_{k|n}n^{\frac nk-1}\varphi(k)$

此时 $k$ 是 $n$ 的约数,总个数不会超过 $O(\sqrt n)$ 个。但是直接枚举约数的话难以快速算出 $\varphi$ 值。

考虑将 $n$ 分解质因数,设 $n=\prod\limits_{i=1}^mp_i^{a_i}$ ,那么我们dfs枚举 $k=\prod\limits_{i=1}^mp_i^{b_i}\ (0\le b_i\le a_i)$ ,由于 $\varphi$ 是积性函数,所以在枚举的过程中就可以顺便求出 $\varphi$ 值 ,再与 $n^{\frac nk-1}$ 作乘积累加到答案中即可。这样能够不重不漏地枚举到 $n$ 的所有约数并统计答案。

时间复杂度 $O(T\sqrt n\log n)$ ,由于这个根号是远远不满的,因此可以过。

#include <cstdio>
int a[40] , c[40] , tot , n , p , ans;
inline int pow(int x , int y)
{
int ans = 1;
while(y)
{
if(y & 1) ans = ans * x % p;
x = x * x % p , y >>= 1;
}
return ans;
}
void dfs(int x , int d , int v)
{
if(x > tot)
{
ans = (ans + pow(n % p , n / d - 1) * (v % p)) % p;
return;
}
int i;
dfs(x + 1 , d , v);
d *= a[x] , v *= a[x] - 1;
for(i = 1 ; i <= c[x] ; i ++ , d *= a[x] , v *= a[x])
dfs(x + 1 , d , v);
}
int main()
{
int T , i , x;
scanf("%d" , &T);
while(T -- )
{
scanf("%d%d" , &n , &p);
tot = 0 , x = n;
for(i = 2 ; i * i <= x ; i ++ )
{
if(!(x % i))
{
a[++tot] = i , c[tot] = 0;
while(!(x % i)) x /= i , c[tot] ++ ;
}
}
if(x != 1) a[++tot] = x , c[tot] = 1;
ans = 0 , dfs(1 , 1 , 1);
printf("%d\n" , ans);
}
return 0;
}

【poj2154】Color Polya定理+欧拉函数的更多相关文章

  1. POJ2154 Color【 polya定理+欧拉函数优化】(三个例题)

    由于这是第一天去实现polya题,所以由易到难,先来个铺垫题(假设读者是看过课件的,不然可能会对有些“显然”的地方会看不懂): 一:POJ1286 Necklace of Beads :有三种颜色,问 ...

  2. poj2154Color polya定理+欧拉函数优化

    没想到贱贱的数据居然是错的..搞得我调了一中午+晚上一小时(哦不d飞LJH掉RP毕竟他是BUFF)结果重判就对了五次.. 回归正题,这题傻子都看得出是polya定理(如果你不是傻子就看这里),还没有翻 ...

  3. POJ2154 Color 【Polya定理 + 欧拉函数】

    题目 Beads of N colors are connected together into a circular necklace of N beads (N<=1000000000). ...

  4. poj2154(polya定理+欧拉函数)

    题目链接:http://poj.org/problem?id=2154 题意:n 种颜色的珠子构成一个长为 n 的环,每种颜色珠子个数无限,也不一定要用上所有颜色,旋转可以得到状态只算一种,问有多少种 ...

  5. poj 2154 Color【polya定理+欧拉函数】

    根据polya定理,答案应该是 \[ \frac{1}{n}\sum_{i=1}^{n}n^{gcd(i,n)} \] 但是这个显然不能直接求,因为n是1e9级别的,所以推一波式子: \[ \frac ...

  6. 【POJ2154】Color Pólya定理+欧拉函数

    [POJ2154]Color 题意:求用$n$种颜色染$n$个珠子的项链的方案数.在旋转后相同的方案算作一种.答案对$P$取模. 询问次数$\le 3500$,$n\le 10^9,P\le 3000 ...

  7. Luogu4980 【模板】Polya定理(Polya定理+欧拉函数)

    对于置换0→i,1→i+1……,其中包含0的循环的元素个数显然是n/gcd(i,n),由对称性,循环节个数即为gcd(i,n). 那么要求的即为Σngcd(i,n)/n(i=0~n-1,也即1~n). ...

  8. poj 2154 Color(polya计数 + 欧拉函数优化)

    http://poj.org/problem?id=2154 大致题意:由n个珠子,n种颜色,组成一个项链.要求不同的项链数目.旋转后一样的属于同一种.结果模p. n个珠子应该有n种旋转置换.每种置换 ...

  9. poj2409 & 2154 polya计数+欧拉函数优化

    这两个题都是项链珠子的染色问题 也是polya定理的最基本和最经典的应用之一 题目大意: 用m种颜色染n个珠子构成的项链,问最终形成的等价类有多少种 项链是一个环.通过旋转或者镜像对称都可以得到置换 ...

随机推荐

  1. 20155331 2016-2017-2 《Java程序设计》第九周学习总结

    20155331 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC是什么? JDBC代表Java数据库连接,这对Java编程语言和广泛的数据库之间独立 ...

  2. # 20155337 2016-2017-2 《Java程序设计》第十周学习总结

    20155337 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程 •网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就 ...

  3. day4 CSS属性操作

    1.CSS属性 基本属性 height, 高度 百分比 width, 宽度 像素,百分比 text-align:ceter, 水平方向居中 line-height, 垂直方向根据标签高度 color. ...

  4. 【CF833E】Caramel Clouds

    [CF833E]Caramel Clouds 题面 洛谷 题目大意: 天上有\(n\)朵云,每朵云\(i\)会在时间\([li,ri]\)出现,你有\(C\)个糖果,你可以花费\(c_i\)个糖果让云 ...

  5. Bug 级别定义标准

    缺陷种类 缺陷级别 详细说明 功能缺陷 Urgent (V级) 1.操作系统无法正常使用,死机,出现致命错误 2.数据丢失 3.被测试系统频繁崩溃,程序出错,使功能不能继续使用 4.性能与需求不一致 ...

  6. Hexo+gitment

    Gitment是一个基于GitHub问题的评论系统,可以在没有任何服务器端实现的前端使用. 演示页面 中文简介 特征 入门 方法 定制 关于安全 特征 GitHub登录 Markdown / GFM支 ...

  7. Tensorflow基本开发架构

    Tensorflow基本开发架构 先说句题外话, 这段时间一直研究爬虫技术,主要目的是为将来爬取训练数据做准备,同时学习python编程.这一研究才发现,python的开发资源实在是太丰富了,所有你能 ...

  8. RyuBook1.0案例三:REST Linkage

    REST Linkage 该小结主要介绍如何添加一个REST Link 函数 RYU本身提供了一个类似WSGI的web服务器功能.借助这个功能,我们可以创建一个REST API. 基于创建的REST ...

  9. hdu - 6277,2018CCPC湖南全国邀请赛B题,找规律,贪心找最优.

    题意: 给出N个小时,分配这些小时去写若干份论文,若用1小时写一份论文,该论文会被引用A次,新写一篇论文的话,全面的论文会被新论文引用一次. 找最大的H,H是指存在H遍论文,而且这些论文各被引用大于H ...

  10. 华为笔试——C++转换字符串问题

    题目:转换字符串 题目介绍: 将输入字符串中下标为偶数的字符连成一个新的字符串输出,需要注意两点: 1. 如果输入字符串的长度超过20,则转换失败,返回“ERROR!”字符串: 2. 输入字符串只能由 ...