没想到贱贱的数据居然是错的。。搞得我调了一中午+晚上一小时(哦不d飞LJH掉RP毕竟他是BUFF)结果重判就对了五次。。

回归正题,这题傻子都看得出是polya定理(如果你不是傻子就看这里),还没有翻转,就一个旋转,结果我就欢快的打完交上去了。傻子都知道会TLE,n<=1e9啊,O(n)都原地爆炸,那怎么办。。。一脸懵逼(然后就膜题解了)

可以发现,这题公式就是sigma(gcd(k,n))(k=1~n),然后该怎么优化呢,我(??)发现gcd(k,n)里面肯定有一些k和n的gcd是相同的,那我们设n=i*gcd,k=j*gcd,那i肯定和j互质并且1<=j<=i,而且可以发现,gcd(i*gcd,j*gcd)=gcd,只要知道j有多少个,就让power(n,n/i)乘上这个个数,那gcd=n/i的所有情况就都解决了,那具体j有多少个呢?显而易见(??)就是欧拉函数值(然而我不会)了,那我们O(sqrt(n))枚举i,然后就可以得出gcd,然后就可以求出欧拉函数值,那就是phi(i)*power(n,n/i)

#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
bool v[];
int pr,prime[];
void linear_prime()
{
memset(v,true,sizeof(v));
for(int i=;i<=;i++)
{
if(v[i]==true)prime[++pr]=i;
for(int j=;j<=pr&&i*prime[j]<=;j++)
{
v[i*prime[j]]=false;
if(i%prime[j]==)break;
}
}
}
int n,mod;
int power(int A,int k)
{
int ans=;A%=mod;
while(k!=)
{
if(k%==)ans=(ans*A)%mod;
A=(A*A)%mod;k/=;
}
return ans;
}
int phi(int x)//求欧拉函数值,即j的种数
{
int ans=x;
for(int i=;prime[i]*prime[i]<=x;i++)
{
if(x%prime[i]==)
{
ans=ans-ans/prime[i];
while(x%prime[i]==)x/=prime[i];
}
}
if(x!=)ans=ans-ans/x;
return ans%mod;
}
int main()
{
linear_prime();
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&mod);
int ans=;
//设n=i*gcd 而 k=j*gcd,用欧拉函数将所有j的值求出
for(int i=;i*i<=n;i++)
{
if(n%i==)
{
ans=(ans+phi(i)*power(n,n/i-))%mod;//循环节为gcd
if(i*i!=n)ans=(ans+phi(n/i)*power(n,i-))%mod;
//这里两个power为什么要-1?由于要%mod,所以求值的时提早将/G(G=n)给做了
}
}
printf("%d\n",ans);
}
return ;
}

poj2154Color polya定理+欧拉函数优化的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 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). ...

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

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

随机推荐

  1. 解决hibernate产生的id序列或者setXX不能同步到数据库到问题(this.hibernateTemplate.flush();hibernateTemplate.getSessionFactory().getCurrentSession().connection().commit())

    通过WarehouseInventoryPreLog warehouseInventoryPreLog = new WarehouseInventoryPreLog();产生一个id序列 如果不flu ...

  2. luogu3157 [CQOI2011]动态逆序对

    先算出一个点前头比它大和后头比它小的数量. 每次删点就扔进一个主席树里头,防止造成重复删答案. #include <iostream> #include <cstring> # ...

  3. cherrypy & gevent patch

    给cherrypy 打gevent WSGIServer的patch 1. patch Serving 类 2. 关闭python的原生WSGIServer 具体使用例子参考 我的开源项目  http ...

  4. jquery获取ul中li的值

  5. python 中range和xrange的区别

    range() 相当于直接构造一个列表,而xrange() 是返回一个迭代值. range用法: range( 开始值,结束值,步长) 在需要大量迭代的时候,比较适合使用xrange()

  6. 性能测试工具 - ab 简单应用

    之前知道一般网站性能可以通过 LoadRunner, JMeter, QTP 等相应的软件进行测试, 印象中本科学习 “软件测试” 这门课程时安装并使用过, LoadRunner等不是一个小软件, 安 ...

  7. 第k小整数(树状数组)

    洛谷传送门 入门难度.. 没错,但是我并不是要暴力做. 而是用树状数组来做. 先离散化,然后随便搞一搞就可以了.(晕.比暴力还慢) 如果要查找某一区间的的话可以把区间取出重新建树,然后再求.(更暴力) ...

  8. 【2018 Multi-University Training Contest 1】

    01:https://www.cnblogs.com/myx12345/p/9362221.html 02:https://www.cnblogs.com/myx12345/p/9382267.htm ...

  9. BitmapFactory.Options对图片进行缩放

    package com.pingyijinren.helloworld.activity; import android.graphics.Bitmap; import android.graphic ...

  10. P1359 租用游艇 洛谷

    https://www.luogu.org/problem/show?pid=1359 题目描述 长江游艇俱乐部在长江上设置了n 个游艇出租站1,2,…,n.游客可在这些游艇出租站租用游艇,并在下游的 ...