[SDOI2013]项链
description
luogu
最近,铭铭迷恋上了一种项链。与其他珍珠项链基本上相同,不过这种项链的珠子却与众不同,是正三菱柱的泰山石雕刻而成的。
三菱柱的侧面是正方形构成的,上面刻有数字。 能够让铭铭满意的项链必须满足下面的条件:
- 这串项链由\(n\)颗珠子构成的。
- 每一个珠子上面的数字\(x\),必须满足\(0<x\le a\),且珠子上面的数字的最大公约数要恰 好为\(1\)。两个珠子被认为是相同的,当且仅当他们经过旋转,或者翻转后能够变成一样的。
- 相邻的两个珠子必须不同。
- 两串项链如果能够经过旋转变成一样的,那么这两串项链就是相同的。
铭铭很好奇如果给定\(n\)和\(a\),能够找到多少不同串项链。
由于答案可能很大,所以对输出的答案\(mod\ 10^9+7\)。
多组数据,\(T\le 10,n\le 10^{14},a\le 10^7\),时限\(3s\)。
solution
先求本质不同的珠子数\(m\),发现要用\(Burnside\)。
对于一个置换考虑计算其循环长度为\(k\)是对应的不动点个数。
可以知道其为\(\sum_{x_1}^a...\sum_{x_k}^a[gcd_{i=1}^kx_i=1]\)。
莫比乌斯反演即得\(\sum_{i=1}^a\mu(i)\lfloor\frac{a}{i}\rfloor^k\)。
直接\(O(n)\)应该也能满足要求,可以用数论分块做到\(O(\sqrt n)\)卡常。
再求项链本质不同的方案数。
根据[POJ2888]Magic Bracelet中的老套路转化为\(\frac{1}{n}\sum_{i=1}^nf(gcd(i,n))=\frac{1}{n}\sum_{d|n}f(d)\varphi(\frac{n}{d})\),
其中\(f(n)\)表示长度为\(n\)的手环不考虑旋转时的合法方案数。
发现\(f(1)=0,f(2)=1,f(n)=(m-2)f(n-1)+(m-1)f(n-2)\)。
使用生成函数递推,设\(G(x)=\sum_{i=1}^{\infty}f(i)x^i\),
那么根据递推式有\(G(x)-f(1)x-f(2)x^2=(m-2)x(G(x)-f(1)x)+(m-1)x^2G(x)\)
化简/使用待定系数法解得\(G(x)=\frac{m-1}{1-(m-1)x}-\frac{m-1}{1+x}=\sum_{i=1}^{\infty}(m-1)^i-(m-1)(-1)^i\)。
于是\(O(\sqrt n)\)地\(dfs\)所有约数并递推算\(\varphi\)。
最后需要注意\(n\)可能是\(p\)的倍数,然后就gg了。
解决方法是将原来的\(mod\ p=10^9+7\)变成\(mod\ p^2\),这样求出来的\(Ans=kp^2+r(0\le r<p^2)\),
如果\(p|Ans\)那么显然有\(p|r\),直接除掉,发现\(\frac{Ans}{p}=kp+\frac{r}{p}\equiv\frac{r}{p}(mod\ p)\),仍然是对的。
因为\(n<p^2\),所以\(n\)里面最多只含一个\(p\)为因子,最后乘一下\(\frac{n}{p}\)对于\(p^2\)的逆元即可。
code
#include<bits/stdc++.h>
#define FL "a"
using namespace std;
typedef long long ll;
typedef long double dd;
const int N=1e7+10;
const int p=1e9+7;
const ll mod=1ll*p*p;
const int inv6=166666668;
inline ll read(){
ll data=0,w=1;char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')w=-1,ch=getchar();
while(ch<='9'&&ch>='0')data=data*10+ch-48,ch=getchar();
return data*w;
}
inline void file(){
freopen(FL".in","r",stdin);
freopen(FL".out","w",stdout);
}
inline void upd(ll &a,ll b){a+=b;if(a>=mod)a-=mod;}
inline void dec(ll &a,ll b){a-=b;if(a<0)a+=mod;}
inline ll mul(ll a,ll b){ll k=(dd)a/mod*b;return a*b-k*mod;}
inline ll poww(ll a,ll b){
ll res=1;
for(;b;b>>=1,a=mul(a,a))
if(b&1)res=mul(res,a);
return res;
}
ll n,a,m,m1,m2,mu[N],ans;
inline void init(){
static int pri[N],cnt;static bool vis[N];
memset(vis,0,sizeof(vis));cnt=0;vis[1]=mu[1]=1;
for(int i=2;i<N;i++){
if(!vis[i])pri[++cnt]=i,mu[i]=mod-1;
for(int j=1;j<=cnt&&1ll*i*pri[j]<N;j++){
vis[i*pri[j]]=1;if(mu[i])mu[i*pri[j]]=mod-mu[i];
if(i%pri[j]==0){mu[i*pri[j]]=0;break;}
}
}
for(int i=2;i<N;i++)upd(mu[i],mu[i-1]);
}
inline ll calc(ll x){return (poww(m1,x)-mul(m1,poww(mod-1,x-1))+mod)%mod;}
void exgcd(ll a,ll b,ll &x,ll &y,ll &d){
if(!b){d=a;x=1;y=0;return;}exgcd(b,a%b,y,x,d);y-=a/b*x;
}
inline ll inv(ll a){
ll x,y,d;exgcd(a,mod,x,y,d);x=(x%mod+mod)%mod;return x;
}
ll pri[52];int sum[52],cnt;
inline void fact(ll n){
cnt=0;
for(int i=2;1ll*i*i<=n;i++)
if(n%i==0){
cnt++;pri[cnt]=i;sum[cnt]=0;
while(n%i==0)n/=i,sum[cnt]++;
}
if(n!=1)cnt++,pri[cnt]=n,sum[cnt]=1;
}
void dfs(int x,ll res,ll phi){
if(x==cnt+1){upd(ans,mul(calc(n/res),phi));return;}
for(int i=0;i<=sum[x];i++){
if(i==1)phi=mul(pri[x]-1,phi);
else if(i)phi=mul(pri[x],phi);
if(i)res=mul(res,pri[x]);dfs(x+1,res,phi);
}
}
int main()
{
int T=read();init();
while(T--){
n=read();a=read();m=2;ans=0;
for(ll i=1,j;i<=a;i=j+1){
j=a/(a/i);
upd(m,mul(mul(3,(mu[j]-mu[i-1]+mod)%mod),poww((a/i),2)));
upd(m,mul((mu[j]-mu[i-1]+mod)%mod,poww((a/i),3)));
}
m=m1=m2=mul(m,inv(6));dec(m1,1);dec(m2,2);
fact(n);dfs(1,1,1);
if(n%p)printf("%lld\n",mul(ans,inv(n))%p);
else ans/=p,printf("%lld\n",mul(ans,inv(n/p))%p);
}
return 0;
}
[SDOI2013]项链的更多相关文章
- BZOJ3202 [Sdoi2013]项链
Problem E: [Sdoi2013]项链 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 427 Solved: 146[Submit][Sta ...
- bzoj 3202: [Sdoi2013]项链
Description 项链是人体的装饰品之一,是最早出现的首饰.项链除了具有装饰功能之外,有些项 链还具有特殊显示作用,如天主教徒的十字架链和佛教徒的念珠. 从古至今人们为了美化人体本身,也美 化环 ...
- bzoj3202:[Sdoi2013]项链
思路:首先考虑如何求珠子个数,一个珠子由a,b,c三个数组成且属于区间[1,a],并满足gcd(a,b,c)=1.由于要求本质相同,对于a,b,c这样的一个无序的数列且满足gcd(a,b,c)=1,设 ...
- 洛谷P3307 [SDOI2013]项链 [polya定理,莫比乌斯反演]
传送门 思路 很明显的一个思路:先搞出有多少种珠子,再求有多少种项链. 珠子 考虑这个式子: \[ S3=\sum_{i=1}^a \sum_{j=1}^a\sum_{k=1}^a [\gcd(i,j ...
- 洛谷 P3307: bzoj 3202: [SDOI2013] 项链
题目传送门:洛谷P3307.这题在bzoj上是权限题. 题意简述: 这题分为两个部分: ① 有一些珠子,每个珠子可以看成一个无序三元组.三元组要满足三个数都在$1$到$m$之间,并且三个数互质,两个珠 ...
- Luogu3307:[SDOI2013]项链
传送门 求每个珠子的方案数 即有序的求三元组 \((x,y,z),x,y,z\le a\) 满足 \(gcd(x,y,z)=1\) 设 \(G_i\) 表示 \(i\) 个小于等于 \(a\) 的有序 ...
- bzoj 3202 [Sdoi2013]项链——容斥+置换+推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3202 可见Zinn博客:https://www.cnblogs.com/Zinn/p/100 ...
- 洛谷 P3307 - [SDOI2013]项链(Burnside 引理+数论)
题面传送门 看到题目我们显然可以将题目拆分成两部分:首先求出有多少个符合要求的珠子 \(c\),这样我们就可以将每种珠子看成一种颜色,题目也就等价于有多少种用 \(c\) 种颜色染长度为 \(n\) ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- jmeter发送http请求(初学者)
1.jmeter安装配置(百度,这里就不赘述了) 2.添加线程组 测试计划-->添加-->Threads-->线程组 3.线程组配置 线程数:用户数或者并发数,设置为100则有100 ...
- ETCD分布式存储部署
一.ETCD 概述 ETCD 是一个分布式一致性k-v存储系统,可用于服务注册发现与共享配置.具有一下优点: 简单: 相比于晦涩难懂的paxos算法,etcd基于相对简单且易实现的raft算法实现一致 ...
- [egret]白鹭引擎打包安卓包体积太大减小
萌新第一次用egret打安卓包,发现裸包22M+,吃惊到吃手手. 上网搜查无果. 可能原因是egret优化过一波打包,变得更便利了,网上对新版本打包比较少讨论. 解决方法: egret-android ...
- jsp标签在JavaScript中使用时,可能会出现的一个问题。
直接上代码 <script type="text/javascript"> var E = window.wangEditor; var editor = new E( ...
- SSM搭项目报错:HTTP Status 400 – Bad Request
具体报错如下: Type Status Report Description The server cannot or will not process the request due to some ...
- CHAPTER 19 Ordering the World 第19章 分类世界
CHAPTER 19 Ordering the World 第19章 分类世界 Our planet is home to a bewildering variety of plants and an ...
- Netty源码分析第7章(编码器和写数据)---->第1节: writeAndFlush的事件传播
Netty源码分析第七章: 编码器和写数据 概述: 上一小章我们介绍了解码器, 这一章我们介绍编码器 其实编码器和解码器比较类似, 编码器也是一个handler, 并且属于outbounfHandle ...
- 基于openvswitch+Docker构建SDN网络测试环境 (使用ovs-docker进行构建)
这是一篇之前写的笔记,主要记录了使用openvswitch + Docker 等进行一个小型的SDN网络搭建的操作步骤.由于 之前临时有其他任务,耽搁了一下,最近开始重新整理,并计划开发一个简单的Py ...
- Redis勒索事件爆发,如何避免从删库到跑路?
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB发表于云+社区专栏 9月10日下午,又一起规模化利用Redis未授权访问漏洞攻击数据库的事件发生,此次 ...
- Thunder团队--Beta发布用户使用报告
Thunder爱阅app Beta 发布用户使用报告 用户数量:14人 以下为用户评论:(注:为了保护用户的姓名权,以下用户名以昵称形式给出.) 序号 昵称 个人信息 获得软件途径 使用次数 用户评论 ...