这两个题都是项链珠子的染色问题

也是polya定理的最基本和最经典的应用之一

题目大意: 用m种颜色染n个珠子构成的项链,问最终形成的等价类有多少种

项链是一个环。通过旋转或者镜像对称都可以得到置换

旋转可以旋转 i=[1,n]次。。画图可以看出循环节有gcd(n,i)个

镜像对称的置换画个图也是很容易找的

然后通过polya定理就可以容易的求出等价类的种数了

2409就是这样一个裸题,以下为ac代码

#include <iostream>
#include <stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<ctype.h>
using namespace std;
#define MAXN 10000
long long gcd(long long a,long long b)
{
return b?gcd(b,a%b):a;
}
long long pow(long long a,long long b)
{
long long res=;
while(b)
{
if(b&)
{
res*=a;
}
a*=a;
b>>=;
}
return res;
}
int main()
{
long long n,m;
while(scanf("%I64d%I64d",&m,&n),n+m)
{
long long ans=;
for(int i=;i<=n;i++)
{
ans+=pow(m,gcd(n,i));
}
if(n&)
{
ans+=n*pow(m,n/+);
}
else
{
ans+=n/*pow(m,n/)+n/*pow(m,n/+);
}
printf("%I64d\n",ans//n);
}
return ;
}

2154不允许镜像对称,只考虑旋转的情况

但是n很大。o(n)会超时,因此需要用优化。。

然后去学习了一种欧拉函数优化方法:

只枚举循环节的个数 ,然后计算出这样的置换有多少个,再统计即可

假设某种置换的循环节个数为 d,那么我们所求的就是满足gcd(n,i)=d 的 i 的个数

显然  i 应该是 d的倍数,令i =q*d,再令  n=p*d;

等式变为gcd(p*d,q*d)==d, 即 p,q 互质

而由n>=i 可知 p>=d  要对每一个p,求小于等于p且与p互质的数。。显然是求 p的欧拉函数了

具体见代码:

#include <iostream>
#include <stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<ctype.h>
using namespace std;
#define maxn 100000
int phi(int n)
{
int res=n;
for(int i=;i*i<=n;i++)
{
if(n%i==)
{
res=res/i*(i-);
}
while(n%i==)
n/=i;
}
if(n>)
res=res/n*(n-);
return res;
}
int pow(int a,int b,int mod)
{
int res=;
a%=mod;
while(b)
{
if(b&)
{
res*=a;
res%=mod;
}
a*=a;
a%=mod;
b>>=;
}
return res;
}
int main()
{
int t;
int n,p;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&p);
int ans=;
for(int i=;i*i<=n;i++)
{
if(n%i)
continue;
if(i*i==n)
{
ans+=phi(i)%p*pow(n,n/i-,p);
ans%=p;
}
else
{
ans+=phi(i)%p*pow(n,n/i-,p);
ans%=p;
ans+=phi(n/i)%p*pow(n,i-,p);
ans%=p;
}
}
cout<<ans<<endl;
}
return ;
}

poj2409 & 2154 polya计数+欧拉函数优化的更多相关文章

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

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

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

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

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

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

  4. HDU 2239 polya计数 欧拉函数

    这题模数是9937还不是素数,求逆元还得手动求. 项链翻转一样的算一种相当于就是一种类型的置换,那么在n长度内,对于每个i其循环节数为(i,n),但是由于n<=2^32,肯定不能直接枚举,所有考 ...

  5. 【poj2154】Color Polya定理+欧拉函数

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

  6. poj2154-color-polyan次二面体+欧拉函数优化

    N<=1e9,O(nlogn)的做法会超时.从枚举置换转变为枚举轮换长度,然后可以利用欧拉函数,把复杂度变为O(√n * logn) /*---------------------------- ...

  7. 【bzoj3518】点组计数 欧拉函数(欧拉反演)

    题目描述 平面上摆放着一个n*m的点阵(下图所示是一个3*4的点阵).Curimit想知道有多少三点组(a,b,c)满足以a,b,c三点共线.这里a,b,c是不同的3个点,其顺序无关紧要.(即(a,b ...

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

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

  9. 【BZOJ3518】点组计数 欧拉函数

    [BZOJ3518]点组计数 Description 平面上摆放着一个n*m的点阵(下图所示是一个3*4的点阵).Curimit想知道有多少三点组(a,b,c)满足以a,b,c三点共线.这里a,b,c ...

随机推荐

  1. Debian编译内核

    转自 yuzibo博客 http://yuzibo.github.io/DebianBuildKernel.html 最终成功一次了 之前又一次编译了好多次.可惜没有一次成功的,说实话.借助Debia ...

  2. Bitmap基本概念及在Android4.4系统上使用BitmapFactory的注意事项

    本文首先总结一下Bitmap的相关概念,然后通过一个实际的问题来分析设置BitmapFactory.options的注意事项,以减少不必要的内存占用率,避免发生OOM. 一. Bitmap的使用tri ...

  3. 使用exp&imp工具进行数据库备份及恢复

    使用exp&imp工具进行数据库备份及恢复1.exp/imp使用方法介绍exp/imp为一种数据库备份恢复工具,也可以作为不同数据库之间传递数据的工具,两个数据库所在的操作系统可以不同.exp ...

  4. (转)使用DataTime这个类来获取当前的时间

    我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(--).时间(::).日期+时间(-- ::)等. //获取日期+时间 DateTime ...

  5. CSS元素分类及区别

    元素是文档结构的基础,在CSS中,每个元素生成了一个包含了元素内容的框(box,也译为“盒子”).但是不同的元素显示的方式会有所不同,例如<div>和<span>就不同,而&l ...

  6. socket.io 中文手册 socket.io 中文文档

    socket.io 中文手册,socket.io 中文文档转载于:http://www.cnblogs.com/xiezhengcai/p/3956401.html 服务端 io.on('connec ...

  7. 执​行​o​r​a​c​l​e​函​数​的​四​种​方​法

    1.在定义函数时:如果有参数,则参数可有类型但是不加长度. 2.在执行函数: var/variable var_name var_type(如果数据类型是number则没有长度,如果数据类型是varc ...

  8. smokeping报错Can't locate RRDs.pm in @INC (@INC contains

    安装完smokeping,执行debug语句: ./bin/smokeping --debug-daemon ,提示如下错误: Can't locate RRDs.pm in @INC (@INC c ...

  9. DELL R410升级网卡驱动

    官方链接http://zh-cn.broadcom.com/support/ethernet_nic/netxtremeii.php(官方驱动的名字偶尔会改)   注意确保服务器的kernel-dev ...

  10. iOS-封装静态库

    最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Framework.在Xcode上没有找到允许编译,如同Android上的*.so和Win32上的dll这样的说法 ...