BZOJ 3202 项链
题目连接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3202
题意:一个项链由n个珠子组成。每个珠子有三个面,每个面上有一个数字,要求每个珠子三个面的数字的Gcd值为1。三个数排序后相同的算作一种,即珠子(1,3,4)和珠子(3,1,4)是一样的。每个面的数字范围为[1,a]。项链中相邻珠子不能相同,旋转后相同的算作一种。求不同的项链个数。模M=1e9+7。
思路:首先可以算出不同珠子的种类,容斥莫比乌斯啥的,设有m种。接下来设长度为n的项链满足相邻不一样的方案数,设为f(n),那么f(n)=f(n-1)*(m-2)+f(n-2)*(m-1)。这样答案为:

const i64 M1=1000000007;
const i64 M2=1000000014000000049;
const int N=10000005;
int prime[N],cnt,tag[N];
int mou[N];
void init()
{
int i,j;
for(i=2;i<N;i++)
{
if(!tag[i]) prime[cnt++]=i,mou[i]=-1;
for(j=0;j<cnt&&(i64)i*prime[j]<N;j++)
{
tag[i*prime[j]]=1;
if(i%prime[j]) mou[i*prime[j]]=-mou[i];
else
{
mou[i*prime[j]]=0;
break;
}
}
}
mou[1]=1;
}
i64 n,a,mod;
i64 mul(i64 x,i64 y)
{
x%=mod;
i64 ans=0;
if(y<0) x=-x,y=-y;
while(y)
{
if(y&1) ans=(ans+x)%mod;
x=(x+x)%mod;
y>>=1;
}
if(ans<0) ans+=mod;
return ans;
}
i64 C2(i64 x)
{
if(x<2) return 0;
return x*(x-1)/2%mod;
}
i64 C3(i64 x)
{
if(x<3) return 0;
i64 a=x,b=x-1,c=x-2;
if(a%2==0) a>>=1;
else b>>=1;
if(a%3==0) a/=3;
else if(b%3==0) b/=3;
else c/=3;
return mul(mul(a,b),c);
}
i64 cal()
{
i64 ans=1;
int i;
for(i=1;i<=a;i++) if(mou[i])
{
ans+=mou[i]*C2(a/i)*2;
ans%=mod;
ans+=mou[i]*C3(a/i);
ans%=mod;
}
return ans;
}
i64 myPow(i64 x,i64 y)
{
i64 ans=1;
while(y)
{
if(y&1) ans=mul(ans,x);
x=mul(x,x);
y>>=1;
}
return ans;
}
i64 m;
i64 eular(i64 x)
{
i64 i;
i64 ans=x;
for(i=0;i<cnt&&(i64)prime[i]*prime[i]<=x;i++) if(x%prime[i]==0)
{
ans-=ans/prime[i];
while(x%prime[i]==0) x/=prime[i];
}
if(x>1) ans-=ans/x;
return ans;
}
i64 f(i64 n)
{
if(n%2==0) return (myPow(m-1,n)+(m-1))%mod;
return (myPow(m-1,n)-(m-1))%mod;
}
int main()
{
init();
int T=getInt();
while(T--)
{
n=getInt();
a=getInt();
if(n%M1==0) mod=M2;
else mod=M1;
m=cal();
i64 ans=0;
int i;
for(i=1;(i64)i*i<=n;i++) if(n%i==0)
{
ans+=mul(f(i),eular(n/i));
ans%=mod;
if(n/i!=i) ans+=mul(f(n/i),eular(i));
ans%=mod;
}
if(mod==M1) ans=mul(ans,myPow(n%mod,mod-2));
else
{
mod=M1;
ans=ans/mod*myPow(n/mod,mod-2)%mod;
}
if(ans<0) ans+=mod;
printf("%lld\n",ans);
}
}
BZOJ 3202 项链的更多相关文章
- bzoj 3202: [Sdoi2013]项链
Description 项链是人体的装饰品之一,是最早出现的首饰.项链除了具有装饰功能之外,有些项 链还具有特殊显示作用,如天主教徒的十字架链和佛教徒的念珠. 从古至今人们为了美化人体本身,也美 化环 ...
- 洛谷 P3307: bzoj 3202: [SDOI2013] 项链
题目传送门:洛谷P3307.这题在bzoj上是权限题. 题意简述: 这题分为两个部分: ① 有一些珠子,每个珠子可以看成一个无序三元组.三元组要满足三个数都在$1$到$m$之间,并且三个数互质,两个珠 ...
- bzoj 3202 [Sdoi2013]项链——容斥+置换+推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3202 可见Zinn博客:https://www.cnblogs.com/Zinn/p/100 ...
- bzoj 3202 [Sdoi 2013] 项链 —— 置换+计数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3202 参考了博客: https://www.cnblogs.com/zhoushuyu/p/ ...
- 【BZOJ】【1878】【SDOI2009】HH的项链
树状数组/前缀和 Orz lct1999 好神的做法... 先看下暴力的做法:对于区间[l,r],我们依次扫过去,如果这个数是第一次出现,那么我们种类数+1. 我们发现:区间中相同的几个数,只有最左边 ...
- 【BZOJ】【3790】神奇项链
Manacher算法/DP 找出所有的回文串,看做是一个个线段,那么问题就转化成了用最少的线段将整个区间覆盖起来,可以重叠,那么这就是一个DP了= = Orz ZKY大爷,让蒟蒻开眼界了……头一次知道 ...
- BZOJ 3790 神奇项链 hash/后缀自动机+贪心
Description 母亲节就要到了,小 H 准备送给她一个特殊的项链.这个项链可以看作一个用小写字母组成的字符串,每个小写字母表示一种颜色. 为了制作这个项链,小 H 购买了两个机器.第一个机器可 ...
- bzoj 4330: JSOI2012 爱之项链
听说这题不公开.. 那就不贴题意了 首先要用burnside引理求出戒指的种数,那么对于一个顺时针旋转$k$个位置的置换就相当于连上一条$(i,(i+k)%R)$的边,每个环颜色必须相同 环的个数为$ ...
- BZOJ 1878: [SDOI2009]HH的项链
1878: [SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3548 Solved: 1757[Submit][Statu ...
随机推荐
- redis连接数问题
redis连接数查看 info client redis连接数满了,不会继续建立连接. 造成redis连接数满了原因有很多. 1.建立新连接不close()的话redis连接不会回归连接池. 显示所有 ...
- 8. 星际争霸之php设计模式--享元模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- access调用联系
using System; using System.Configuration; using System.Data; using System.Linq; using System.Web; us ...
- OpenStack 镜像制作之cloud-init
Contents [hide] 1 背景 2 密钥登录 2.1 密钥登录的原理 2.1.1 openstack的私钥 2.1.2 密码注入 = 2.1.3 实际遇到的情况 2.1.4 解决办法 背景 ...
- iOS,破冰!
首发:个人博客,更新&纠错&回复 iOS,破冰! 今年学的技术,以iOS自学为成本最高昂:花几千块买了台mac mini电脑,又前后买了6本书籍,从头到尾是30天时间,当然,这30天里 ...
- Ubuntu12.04 安装Samba
Ubuntu12.04 安装Samba Ubuntu12.04 安装Samba 本教程介绍了在Ubuntu12.04安装Samba文件服务器,以及如何配置它通过SMB协议共享文件,以及如何将用户添加. ...
- 使用163CentOS镜像
CentOS镜像使用帮助 收录架构 i386 x86_64 SRPMS 收录版本 5 6 更新时间 每5小时更新一次 使用说明 首先备份/etc/yum.repos.d/CentOS-Base.r ...
- Composer使用中常见的问题
安装了Composer后,运行 composer --version ,查看Composer的版本号.如果出现下面的提示,那么软件安装成功. Composer version 1.2.0 2016-0 ...
- ectouch第九讲 之ectouch 开始调试模式方法
ectouch 开始调试模式方法 原文: http://my.oschina.net/u/1036767/blog/407067页面报错对于发现编程过程中的问题很重要,所以在开发之前要先搞定它,免得出 ...
- Mongodb 和Redis 的相同点和不同点
MongoDB和Redis都是NoSQL,采用结构型数据存储.二者在使用场景中,存在一定的区别,这也主要由于二者在内存映射的处理过程,持久化的处理方法不同.MongoDB建议集群部署,更多的考虑到集群 ...