POJ 2154 【POLYA】【欧拉】
前记:
TM终于决定以后干啥了。这几天睡的有点多。困饿交加之间喝了好多水。可能是灌脑了。
切记两件事:
1.安心当单身狗
2.顺心码代码
题意:
给你N种颜色的珠子,串一串长度问N的项链,要求旋转之后重合的算是同一种项链。问一共有多少中可能。结果模p。
1 <= N <= 1000000000, 1 <= P <= 30000
思路:
首先是我们的POLYA定理,给定的公式是这样的sigma(N^gcd(N,i))/N i从0到N-1.
然后是优化的问题。因为如果我们枚举i累加一定会超时。
这道题考虑的是gcd(N,i)的种类是有限的。我们只要求出每种gcd有多少个就可以了。
考虑N=X*GCD I=Y*GCD
由此我们知道gcd(x,y)一定是1.
所以考虑枚举x,GCD的个数应该是x的欧拉。
坑点:
春困。TM变量总是写错。这道题的减一来源于提前把N给除掉了【这个N经常容易被人忽略】
#include<iostream>
#include<math.h>
#include<string.h>
#include<stdio.h>
using namespace std;
int prime[];//0代表是素数
int tmp[];//素数的序列
int part[];//将t分解
int num[];//每个质因数的分解数量
int jilu[];//dfs记录某个质因数用了几个
long long ans,t,p;//t是N,p是p
int partn;//记录一共分解成了几种素数
void fprime()//筛法打表
{
int atmp=,j;
for(int i=;i<;i++)
{
if(!prime[i])
{
tmp[atmp++]=i;
}
for(j=;j<atmp;j++)
{
if(i*tmp[j]>=)
break;
prime[i*tmp[j]]=;
if(i%tmp[j]==)
break;
}
}
}
void depart(int t){
int sq=sqrt(t)+;
for(int i=;tmp[i]<=sq;i++){
if(t%tmp[i]==){
part[partn]=tmp[i];
while(t%tmp[i]==){
num[partn]++;
t/=tmp[i];
}
partn++;
}
}
if(t>){
part[partn]=t;
num[partn]=;
partn++;
}
}
void init(){
memset(num,,sizeof(num));
partn=;
ans=;
}
long long quick_pow(long long a,long long b){
long long rel=;
while(b){
if(b&){
rel*=a;
rel%=p;
}
a*=a;
a%=p;
b>>=;
}
return rel;
}
long long oula(){
long long rel=;
for(int i=;i<=partn;i++){
if(jilu[i]){
rel*=(part[i]-)*quick_pow(part[i],jilu[i]-);
rel%=p;
}
}
return rel;
}
void dfs(int pos,long long nnum){
if(pos>partn){
long long a=oula();
long long b=quick_pow(t,t/nnum-);
ans+=(a%p)*(b%p)%p;
ans%=p;
return;
}
long long ttt=;
for(int i=;i<=num[pos];i++){
jilu[pos]=i;
dfs(pos+,nnum*ttt);
ttt*=part[pos];
}
}
int main()
{
fprime();
int n;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%I64d%I64d",&t,&p);
init();
depart(t);
partn--;
dfs(,);
printf("%I64d\n",ans);
}
}
POJ 2154 【POLYA】【欧拉】的更多相关文章
- poj 2154 Color 欧拉函数优化的ploya计数
枚举位移肯定超时,对于一个位移i.我们须要的是它的循环个数,也就是gcd(i,n),gcd(i,n)个数肯定不会非常多,由于等价于n的约数的个数. 所以我们枚举n的约数.对于一个约数k,也就是循环个数 ...
- POJ 2154 color (polya + 欧拉优化)
Beads of N colors are connected together into a circular necklace of N beads (N<=1000000000). You ...
- 欧拉函数 &【POJ 2478】欧拉筛法
通式: $\phi(x)=x(1-\frac{1}{p_1})(1-\frac{1}{p_2})(1-\frac{1}{p_3}) \cdots (1-\frac{1}{p_n})$ 若n是质数p的k ...
- POJ 2480 (约数+欧拉函数)
题目链接: http://poj.org/problem?id=2480 题目大意:求Σgcd(i,n). 解题思路: 如果i与n互质,gcd(i,n)=1,且总和=欧拉函数phi(n). 如果i与n ...
- Poj 2478-Farey Sequence 欧拉函数,素数,线性筛
Farey Sequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14291 Accepted: 5647 D ...
- POJ 2407 Relatives(欧拉函数)
题目链接 题意 : 求小于等于n中与n互质的数的个数. 思路 : 看数学的时候有一部分是将欧拉函数的,虽然我没怎么看懂,但是模板我记得了,所以直接套了一下模板. 这里是欧拉函数的简介. #includ ...
- POJ 1386 有向图欧拉通路
题意:给你一些字符串,这些字符串可以首位相接(末位置如果和另一个字符串的首位置相同的话就可以相连) .然后问你是否可以全部连起来. 思路:就是取出每个字符串的首尾位置,然后求出出度和入度,根据有向欧拉 ...
- poj 2773 利用欧拉函数求互质数
题意:找到与n互质的第 k个数 开始一看n是1e6 敲了个暴力结果tle了,后来发现k达到了 1e8 所以需要用到欧拉函数. 我们设小于n的 ,与n互质的数为 (a1,a2,a3.......a(p ...
- poj 2480 (欧拉函数应用)
点击打开链接 //求SUM(gcd(i,n), 1<=i<=n) /* g(n)=gcd(i,n),根据积性定义g(mn)=g(m)*g(n)(gcd(m,n)==1) 所以gcd(i,n ...
- POJ 2208 Pyramids 欧拉四面体
给出边长,直接就可以求出体积咯 关于欧拉四面体公式的推导及证明过程 2010-08-16 14:18 1,建议x,y,z直角坐标系.设A.B.C少拿点的坐标分别为(a1,b1,c1),(a2,b2,c ...
随机推荐
- Linux-LVS+keepalived-Testing
LVS:Linux Virtual Server+++++++++++++Info+++++++++++VIP:172.18.20.222LVS-Master IP:172.18.20.206LVS- ...
- PERCENT_RANK
1. percent_rank() over (order by .....) 返回某列或某列组合后每行的百分比排序 如下: with cte as( SELECT ROWNUM as n FRO ...
- openstack(liberty):部署实验平台(二,简单版本软件安装 part2)
继续前面的part1,将后续的compute以及network部分的安装过程记录完毕! 首先说说compute部分nova的安装. n1.准备工作.创建数据库,配置权限!(密码依旧是openstack ...
- 在网页标题栏上和收藏夹显示网站logo
第一步,准备一个图标制作软件. 首先您必须了解所谓的图标(Icon)是一种特殊的图形文件格式,它是以.ico 作为扩展名.普通的图像设计软件无法使用这种格式,所以您需要到下载一个ico图标工具,本站常 ...
- CryptoAPI与openssl数字签名与验证交互
昨天写过了RSA非对称加密解密的交互方式, 其实数字签名也是RSA非对称加密,只不过用私钥加密的,再加上个hash摘要 CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDI ...
- c++中引用和指针的区别
1.指针和引用的主要区别. 引用是为变量起另一个名字(小名),一般在变量初始化时,初始值直接拷贝给变量,定义引用时,把引用(小名)和初始值“绑定”在一起,而不是将初始值拷贝给引用.因为 无法将引用重新 ...
- bzoj4637: 期望
Description 在米国有一所大学,名叫万国歌剧与信息大学(UniversalOperaandInformaticasUniversity).简称UOI大学.UO I大学的建筑与道路分布很有趣, ...
- for name in loop Shell
for NAME in joe jane juliedoADDRESS="$NAME@example.com"MESSAGE='Projects are due today!'ec ...
- QT5中的信号与槽与C++ 11的function的配合
最近将公司的界面开发库从WX转换到了QT,有了信号和槽,原本我们在使用WX的时候,为了使用信号,我们是使用BOOST的signal2库,到了QT有了信号槽,这个就没什么必要了 但是前段时间使用QT发现 ...
- HDU3530 子序列
题目大意:给出一串长度为n的整数串,求最长的一个连续子序列,满足该序列中最大的元素与最小的元素之差大于等于m, 并且小于等于k.n<=100000 分析:维护两个单调队列,一个递增的,维护最小值 ...