poj2154-color-polyan次二面体+欧拉函数优化
N<=1e9,O(nlogn)的做法会超时。从枚举置换转变为枚举轮换长度,然后可以利用欧拉函数,把复杂度变为O(√n * logn)
1 /*--------------------------------------------------------------------------------------*/ 2 3 #include <algorithm> 4 #include <iostream> 5 #include <cstring> 6 #include <ctype.h> 7 #include <cstdlib> 8 #include <cstdio> 9 #include <vector> 10 #include <string> 11 #include <queue> 12 #include <stack> 13 #include <cmath> 14 #include <set> 15 #include <map> 16 17 //debug function for a N*M array 18 #define debug_map(N,M,G) printf("\n");for(int i=0;i<(N);i++)\ 19 {for(int j=0;j<(M);j++){\ 20 printf("%d",G[i][j]);}printf("\n");} 21 //debug function for int,float,double,etc. 22 #define debug_var(X) cout<<#X"="<<X<<endl; 23 #define LL long long 24 const int INF = 0x3f3f3f3f; 25 const LL LLINF = 0x3f3f3f3f3f3f3f3f; 26 /*--------------------------------------------------------------------------------------*/ 27 using namespace std; 28 29 int N,M,T; 30 int MOD = 1e9+7; 31 32 int Eular(int n) 33 { 34 int ans = n; 35 for(int i=2;i*i<=n;i++) 36 { 37 if(n%i == 0) 38 { 39 ans -= ans/i; 40 while(n%i == 0) n/= i; 41 } 42 } 43 if(n>1) ans -= ans/n; 44 return ans; 45 } 46 int pow_mod(int x,int cnt) 47 { 48 int base = x%MOD,res = 1; 49 while(cnt) 50 { 51 if(cnt&1) {res *= base;res %= MOD;} 52 base *= base;base %= MOD; 53 cnt >>= 1; 54 } 55 return res; 56 } 57 58 int polya(int n,int m) 59 { 60 int res = 0; 61 int i; 62 for(i=1;i*i<n;i++) 63 { 64 if(n%i == 0) 65 { 66 res += Eular(i)%MOD * pow_mod(m,n/i-1)%MOD;res %= MOD; 67 res += Eular(n/i)%MOD * pow_mod(m,i-1)%MOD;res %= MOD; 68 } 69 } 70 if(i*i == n) res += Eular(i)%MOD*pow_mod(m,i-1)%MOD; 71 return res%MOD; 72 } 73 74 int main() 75 { 76 scanf("%d",&T); 77 while(T--) 78 { 79 scanf("%d%d",&N,&MOD); 80 printf("%d\n",polya(N,N)); 81 } 82 }
转载于:https://www.cnblogs.com/helica/p/5823656.html
poj2154-color-polyan次二面体+欧拉函数优化相关推荐
- poj2154(Polya+欧拉函数优化模版)
#include <cstdio> #include <cstring> #include<iostream> using namespace std; const ...
- 【数学知识】三种方法求 [1,n] 中所有数欧拉函数(线性筛欧拉函数优化至 O(n) )
整理的算法模板合集: ACM模板 ①直接求小于或等于n,且与n互质的数个数(求[1,n]中所有数的欧拉函数时间复杂度:O(nn)O(n\sqrt{n})O(nn)) ②求[1,n]之间每个数的质因数 ...
- poj2154Color polya定理+欧拉函数优化
没想到贱贱的数据居然是错的..搞得我调了一中午+晚上一小时(哦不d飞LJH掉RP毕竟他是BUFF)结果重判就对了五次.. 回归正题,这题傻子都看得出是polya定理(如果你不是傻子就看这里),还没有翻 ...
- POJ2154(Pólya定理与欧拉函数优化)
题目:Color 题意:将正n边形的n个顶点用n种颜色染色,问有多少种方案(答案mod p,且可由旋转互相得到的算一种) 先说说Pólya定理 设Q是n个对象的一个置换群,用m种颜色涂染这n个对象,一 ...
- 【4.3 欧拉函数详解】
更好的阅读体验\color{red}{更好的阅读体验}更好的阅读体验 目录 4.3.1 公式法求欧拉函数 4.3.2 筛法求欧拉函数 概念 1∼N1∼N1∼N中与NNN互质的数的个数被称为欧拉函数,记 ...
- hdu 1286( 欧拉函数 )
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1286 数学题真的是有点吃不消了... View Code 1 #include<iostream ...
- 费马定理中值定理_数论-欧拉函数、欧拉定理
欧拉函数 积性函数 满足 ( 互质) 定义 对于正整数 ,欧拉函数是小于等于 的所有数中与 互质的数的 个数. 欧拉函数是积性函数(这个证明不是很显然,这个链接里面有很多种证明方法) 记作: 公式 , ...
- 【数学专题】约数个数与欧拉函数
整理的算法模板合集: ACM模板 目录 一.约数个数 1. AcWing 1291. 轻拍牛头 2. AcWing 1294. 樱花 2.1 AcWing 197. 阶乘分解 3. AcWing 19 ...
- bzoj 1409 Password 矩阵快速幂+欧拉函数
可以发现,该数组的mi就是斐波那契数列 所以要矩阵快速幂搞出第n位 但是斐波那契数列上涨的很快,这就需要欧拉定理了 p^phi(q)%q=1(gcd(p,q)==1) p是素数,所以可以用 然后需要5 ...
最新文章
- 京东某女程序员求助:刚入职就意外怀孕,纠结还能不能过试用期?网友:职场女性太难!...
- Eclipse安装Database Development插件。
- QT的QGraphicsView类的使用
- (软件工程复习核心重点)第八章面向对象方法学习题
- PrintNightmare 漏洞的补丁管用吗?安全界和微软有不同看法
- python3读文件编码格式_使用不同的编码格式读取文件系统标准在Python3中
- 四大猛壳之一的VMProtect轻松保护你的程序
- mysql的dml全程是_MySQL中的DML、DDL、DCL到底是什么呢?
- 云数据库MySQL的发展史
- 微型计算机常常采用三种线结构,2016年河海大学929地理信息系统之地理信息系统概论考研复试题库...
- 医疗设备管理系统源码【免费分享源码】
- PPT批量导入文字(Python实现)
- 显卡RTX2080 + CUDA10 + win10 + tensorflow配置安装探坑记
- mac怎么无线打印机连接到服务器,Mac上wifi打印机怎么用 wifi打印机连接使用教程...
- 工作到现在的一些感想
- python古典问题兔子问题_古典兔子问题
- Allegro PCB Designer 16.6打开brd文件空白的方法
- 【手动安装Python包】
- 《汇编语言》第十章 call 和 ret 指令
- 信号强度 android,一种获取手机信号强度的方法
热门文章
- mysql字段优化_MySQL优化(1):字段的设计
- python私有属性怎么定义_Python中私有属性的定义方式
- 浅谈对html css的理解,HTML+CSS入门 CSS选择器 、属性和值浅谈
- 南京大学计算机考研机试,2018南大CS考研机试答案
- 蓝凌ekp开发_蓝凌EKP8.0产品白皮书(简).doc
- java调用npoi_NPOI导出数据到Excel
- java date类_Java的败笔-Date类
- bartender一行打印两个二次开发_C++ 智能指针和二叉树:图解层序遍历和逐层打印二叉树...
- Makefile和Shell学习笔记
- MySQL面试题 | 附答案解析(十九)