前记:

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】【欧拉】的更多相关文章

  1. poj 2154 Color 欧拉函数优化的ploya计数

    枚举位移肯定超时,对于一个位移i.我们须要的是它的循环个数,也就是gcd(i,n),gcd(i,n)个数肯定不会非常多,由于等价于n的约数的个数. 所以我们枚举n的约数.对于一个约数k,也就是循环个数 ...

  2. POJ 2154 color (polya + 欧拉优化)

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

  3. 欧拉函数 &【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 ...

  4. POJ 2480 (约数+欧拉函数)

    题目链接: http://poj.org/problem?id=2480 题目大意:求Σgcd(i,n). 解题思路: 如果i与n互质,gcd(i,n)=1,且总和=欧拉函数phi(n). 如果i与n ...

  5. Poj 2478-Farey Sequence 欧拉函数,素数,线性筛

    Farey Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14291   Accepted: 5647 D ...

  6. POJ 2407 Relatives(欧拉函数)

    题目链接 题意 : 求小于等于n中与n互质的数的个数. 思路 : 看数学的时候有一部分是将欧拉函数的,虽然我没怎么看懂,但是模板我记得了,所以直接套了一下模板. 这里是欧拉函数的简介. #includ ...

  7. POJ 1386 有向图欧拉通路

    题意:给你一些字符串,这些字符串可以首位相接(末位置如果和另一个字符串的首位置相同的话就可以相连) .然后问你是否可以全部连起来. 思路:就是取出每个字符串的首尾位置,然后求出出度和入度,根据有向欧拉 ...

  8. poj 2773 利用欧拉函数求互质数

    题意:找到与n互质的第 k个数 开始一看n是1e6 敲了个暴力结果tle了,后来发现k达到了 1e8 所以需要用到欧拉函数. 我们设小于n的 ,与n互质的数为  (a1,a2,a3.......a(p ...

  9. 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 ...

  10. POJ 2208 Pyramids 欧拉四面体

    给出边长,直接就可以求出体积咯 关于欧拉四面体公式的推导及证明过程 2010-08-16 14:18 1,建议x,y,z直角坐标系.设A.B.C少拿点的坐标分别为(a1,b1,c1),(a2,b2,c ...

随机推荐

  1. log4j日志的打印

    1.加入日志属性文件 log4j.properties log4j.rootLogger=DEBUG,Console,fileout log4j.appender.Console=org.apache ...

  2. C#遍历hashtable

    foreach (DictionaryEntry de in hashTable) { System.Windows.Forms.MessageBox.Show(de.Key.ToString()); ...

  3. R提高篇(一): 输入输出

    目录: 文本输出 图形输出 数据输入 数据框输出 文本导入 Excel导入 文本输出 语法: sink(file = NULL, append = FALSE, type = c("outp ...

  4. scala之method和function的区别

    在我没有学习scala的时候,主要用java和python做日常工作开发,印象中,没有特别的刻意的去区分method和function的区别,这个关系,正如我们日常生活中,没有刻意的去区分质量和重量. ...

  5. 【linux】locate介绍

    Locale和everything 类似,有本地的检索库,它会自动更新检索库,但新创建的文件,不能用locale 查到,需要手动更新检索库update db 才能搜索到,在/tmp 目录下的文件不能搜 ...

  6. Phonegap在ios7上系统状态栏的问题解决

    用Phonegap+jqm开发的应用,在ios6下没问题,但是在ios7下会出现如下系统状态栏和header重合的问题,搜索了一下,发现这其实是 phonegap当前版本的一个已知问题,通过修改./p ...

  7. WPF4.5 中的新增功能和增强功能的信息

    本主题包含有关 Windows Presentation Foundation (WPF) 版本 4.5 中的新增功能和增强功能的信息. 本主题包含以下各节: 功能区控件 改善性能,当显示大时设置分组 ...

  8. svn 提交错误 400 Bad Reqest MKACTIVITY 请求于XX失败 Conflict Unable to connect to a repository at URL

    思路来源:http://www.cnblogs.com/wangyt223/archive/2012/11/22/2782801.html svn 提交错误 400 Bad Reqest MKACTI ...

  9. go与c++链接示例

    go lang与c/c++的链接示例: foo.hpp //foo.hpp #ifndef _FOO_HPP_ #define _FOO_HPP_ template<typename T> ...

  10. PLSQL_基础系列02_分组函数GROUP BY / ROLLUP / CUBE(案例)

    2014-11-30 Created By BaoXinjian