首页 > 其他分享 >POJ2154(Pólya定理与欧拉函数优化)

POJ2154(Pólya定理与欧拉函数优化)

时间:2023-05-31 18:37:59浏览次数:64  
标签:prime a% POJ2154 int lya ans rea 欧拉 置换群


题目:Color

 

题意:将正n边形的n个顶点用n种颜色染色,问有多少种方案(答案mod p,且可由旋转互相得到的算一种)

 

先说说Pólya定理

设Q是n个对象的一个置换群,用m种颜色涂染这n个对象,一个对象涂任意一种颜色,则在Q作用下不等价的方案数为:   

POJ2154(Pólya定理与欧拉函数优化)_i++

|Q|为置换群中置换的个数,

POJ2154(Pólya定理与欧拉函数优化)_置换群_02

为将置换q表示成不相杂的轮换的个数,其中包括单轮换,m为颜色数。

 

分析可以知道本题方案的表达式为:

POJ2154(Pólya定理与欧拉函数优化)_i++_03

然后就直接代码了:

#include <stdio.h>
#include <string.h>
#define N 36000

int p;

int pr[N];
bool prime[N];
int k=0;

void isprime()
{
    int i,j;
    memset(prime,true,sizeof(prime));
    for(i=2;i<N;i++)
    {
        if(prime[i])
        {
            pr[k++]=i;
            for(j=i+i;j<N;j+=i)
            {
                prime[j]=false;
            }
        }
    }
}

int phi(int n)
{
    int rea=n,i;
    for(i=0;pr[i]*pr[i]<=n;i++)
    {
        if(n%pr[i]==0)
        {
            rea=rea-rea/pr[i];
            while(n%pr[i]==0)  n/=pr[i];
        }
    }
    if(n>1)
      rea=rea-rea/n;
    return rea%p;
}

int quick_mod(int a,int b)
{
    int ans=1;
    a%=p;
    while(b)
    {
        if(b&1)
        {
            ans=ans*a%p;
            b--;
        }
        b>>=1;
        a=a*a%p;
    }
    return ans;
}

int main()
{
    int i,t,n,ans;
    isprime();
    scanf("%d",&t);
    while(t--)
    {
        ans=0;
        scanf("%d%d",&n,&p);
        for(i=1;i*i<=n;i++)
        {
            if(i*i==n)
                ans=(ans+quick_mod(n,i-1)*phi(i))%p;
            else if(n%i==0)
                ans=(ans+quick_mod(n,i-1)*phi(n/i)+quick_mod(n,n/i-1)*phi(i))%p;
        }
        printf("%d\n",ans%p);
    }
    return 0;
}

 

标签:prime,a%,POJ2154,int,lya,ans,rea,欧拉,置换群
From: https://blog.51cto.com/u_16146153/6388742

相关文章

  • 欧拉函数与容斥
    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:给定五个数,其中有和,求满足条件的有序对的个数。题目中    明确说在所有的输入中。分析:问题可以转化为和时,的有序对的个数。那么先比较和的    大小,相同的部分可以用欧拉函数的累加计算,没有公共的部分用容斥计算......
  • 两天,总计六个小时,中移在线核心业务系统顺利完成1050套欧拉操作系统迁移上线
    摘要:历时两天,总计六个小时,中国移动在线营销服务中心(简称中移在线)正式启动内部核心业务系统全网呼叫平台的迁移工作。首批1050套操作系统完成从CentOS(系统版本7.2、7.4和7.6)到 openEuler高效平滑迁移。中移在线拥有全球最大的呼叫平台,采用“中心+边缘”的部署架构,按照“控制集中,......
  • Musl libc 库成功适配到 openEuler Embedded,推动欧拉嵌入式生态发展
    近期,RISC-VSIG在欧拉嵌入式操作系统上成功实现了musllibc的适配,完成了使用musllibc库替换glibc库构建镜像的工作。目前,以musllibc为基础库编译的镜像已在RaspberryPi4开发板上可用,这一成果推动了openEulerEmbedded的多态发展。编译镜像步骤说明:https://openeule......
  • 欧拉函数|欧拉函数及其性质|欧拉函数及其性质证明 一文说明白
    欧拉函数在数论,对正整数n,欧拉函数是小于等于n的正整数中与n互质的数的数目。读作phi。\(\LaTeX\)大写:\phi\(\phi\),小写:\varphi\(\varphi\)部分选自百度百科欧拉函数的性质以下所有\(p\)表示质数性质1\[\varphi(p)=p-1\]性质1的证明根据质数的定义,比p小的数......
  • CF714B Filya and Homework 题解
    题意给定一个长度为\(n\)的数组。我们可以给一些数加上一个\(x\),也可以减去一个\(x\),也可以不加也不减。问:是否存在一个数\(x\),使得这个数组里各个数都相等。思路一道思维题首先考虑,在这个数组中,相同的元素,我们一定是给它做相同的操作,否则一定不相等,根据这个思想,......
  • 埃氏筛 & 欧拉筛
    Part1埃氏筛埃拉托斯特尼筛法,简称埃氏筛或爱氏筛,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。---百度词条思想从一数列中最小质数开始,寻找其倍数,即合数,筛去直至最......
  • hdu:gcd(欧拉函数)
    ProblemDescriptionThegreatestcommondivisorGCD(a,b)oftwopositiveintegersaandb,sometimeswritten(a,b),isthelargestdivisorcommontoaandb,Forexample,(1,2)=1,(12,18)=6.(a,b)canbeeasilyfoundbytheEuclideanalgorithm.NowCarpiscon......
  • The Euler function(欧拉函数)
    ProblemDescriptionTheEulerfunctionphiisanimportantkindoffunctioninnumbertheory,(n)representstheamountofthenumberswhicharesmallerthannandcoprimeton,andthisfunctionhasalotofbeautifulcharacteristics.Herecomesaverye......
  • imu 话题数据,欧拉角
    header:消息头,包含序列号、时间戳和坐标系等信息。orientation:IMU的当前朝向,用四元数表示,包括$x,y,z$和$w$四个值。orientation_covariance:朝向协方差矩阵,包含$9$个元素,描述IMU测量的朝向误差。angular_velocity:IMU的角速度,包含$x,y,z$三个分量。ang......
  • 欧拉回路和欧拉路径
    哥尼斯堡七桥问题七桥问题时18世纪著名古典数学问题之一.在哥尼斯堡的一个公园里,有七座桥将河中两个岛及岛与河岸连接起来,问是否可能从这四块陆地中任一块出发,恰好通过每座桥一次,再回到起点欧拉于1736年研究并解决了此问题,并因此开创了数学的一个新的分支——图论与......