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 ...
随机推荐
- 如何学习c++
在之后的随笔中,我作为一个c++的初学者将会把我如何学习c++的经历尽可能详细的记录下来. 这里引用了JerryZhang在他的博文里面写的一段话,当作我的座右铭. 1.多交流:不管你的技术多么硬,你 ...
- 夺命雷公狗—angularjs—19—angular-route
ngRoute包括的内容 ng的路由机制是靠ngRoute提供的,通过hash和history两种方式实现了路由,可以检测浏览器是否支持history来灵活调用相应的方式.ng的路由(ngRoute) ...
- dbms_sql包的用法
http://blog.itpub.net/20948385/viewspace-691398 对于一般的select操作,如果使用动态的sql语句则需要进行以下几个步骤: open cursor ...
- 《C语言入门很简单》欢乐槽点
p24 在C语言中,有三种基本的数据类型供选择,它们有着不同的精度和广度,可以根据自己的需要选择合适的.这三种数据类型分别是整型.浮点型.字符型,它们可谓是C语言数据的三大变形金刚. p237 评:自 ...
- 【海岛帝国系列赛】No.2 海岛帝国:“落汤鸡”市的黑帮危机
50200210海岛帝国:“落汤鸡”市的黑帮危机 [试题描述] 近几天,犯罪分子发现“药师傅”帝国的警力约等于0.(请见YSF的海岛帝国)于是开始猖狂了起来.他们选择了依山靠水(农村?)的“落汤鸡”市 ...
- NOIP199904求Cantor表
求Cantor表 题目描述 Description 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 ...
- oracle中dual表的使用
dual表是一个虚拟表,用来和select语句一起使用.1.查看当前用户select user from dual2.用来调用系统函数select to_char(sysdate,'yyyy-mm- ...
- OpenStack 密码注入
现状 实例可以创建,可以使用vnc,可以ssh,但是就是密码要使用默认tima123,要修改密码必须进入虚拟机.实际场景中如果用户将密码修改后忘记,需要重置密码则我们作为管理员也没有办法.这在实际需求 ...
- 单例模式在Java和C#中的实现
单例模式算是最常见和最容易理解一种设计模式了.通常是指某一个类只有一实例存在,存在的空间我认为可以理解为该类所在的应用系统内,还有一种是在某一个容器内单一存在,比如像spring的IOC容器(作用域为 ...
- REDHAT4.8安装yum
公司用的机器还在跑RHEL4(Red Hat Enterprise Linux AS 4.8),没有yum安装软件真是费时间啊,于是上网找了半天yum安装方法,终于成功.分享一下:核心:wget ht ...