ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

洛谷P1587 [NOI2016]循环之美

2019-12-11 19:05:40  阅读:246  来源: 互联网

标签:lfloor 洛谷 limits sum rfloor mu NOI2016 frac P1587


神仙题目

给定\(n,m\),求有多少数值上互补相等的可以表示成\(\frac{x}{y}\)的数,满足\(1≤x≤n,1≤y≤m\),且\(\frac{x}{y}\)在\(k\)进制下是纯循环小数(特别地,整数也是纯循环小数)
\(1≤n,m≤10^9,2≤k≤2000\)

首先要求数值上互补相等,即要求\(x⊥y\)

又要满足纯循环小数,假设循环节长为\(l\),那么\(\frac{k^lx}{y}-\lfloor\frac{k^lx}{y}\rfloor=\frac{x}{y}-\lfloor\frac{x}{y}\rfloor\)

两边同乘一个\(y\)得\(k^lx-\lfloor\frac{k^lx}{y}\rfloor y=x-\lfloor\frac{x}{y}\rfloor y\)

在膜法作用下\(k^lx≡x mod y\)

又因为\(x⊥y\),所以\(k^l≡1 mod y\)

此时我们假设\(gcd(k,y)=d\),那么\(k=k_1d,y=k_2d\)

\(k_1^ld^l≡1 mod y\)

所以\(k_2d|(k_1^ld^l-1)\)

又因为\(k_1⊥k_2\),所以\(d|(k_1^ld^l-1)\)

此时说明右边等于\(k_3d\),得出\(1\)是\(d\)的倍数

所以\(y⊥k\)

问题就变为了,求
\[\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[i⊥j][j⊥k]\]
这个\(i⊥j\)显然可以反演
\[\sum\limits_{j=1}^{n}[j⊥k]\sum\limits_{i=1}^{m}\sum\limits_{d|i,d|j}\mu(d)\]
我们变为枚举\(d\)
\[\sum\limits_{d=1}^{n}\mu(d)\sum\limits_{d|i}\sum\limits_{d|j}[gcd(j,k)==1]\]
我们把\(d\)提出来,但是记得\(d\)也要和\(k\)互质
\[\sum\limits_{d=1}^{n}[gcd(d,k)==1]\mu(d)\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor}[gcd(j,k)==1]\]
\(i\)没用了,化简掉
\[\sum\limits_{d=1}^{n}[gcd(d,k)==1]\mu(d)\lfloor\frac{n}{d}\rfloor\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor}[gcd(j,k)==1]\]
此时我们设\(S(n,k)=\sum\limits_{i=1}^{n}\mu(i)[gcd(i,k)==1],f(n)=\sum\limits_{i=1}^{n}[gcd(i,k)==1]\)
\[\sum\limits_{d=1}^{n}[gcd(d,k)==1]\mu(d)\lfloor\frac{n}{d}\rfloor f(\lfloor\frac{m}{d}\rfloor)\]
只要快速算出特殊点处\(S(n)\)和\(f(n)\)的值,就可以除法分块了

先来考虑\(f(n)\)怎么求

由于\(gcd(i,k)==gcd(i+k,k)\),所以\(f(n)=f(k)*\lfloor\frac{n}{k}\rfloor+f(n\%k)\)预处理出\(n≤k\)的f(n)就可以\(O(1)\)计算了

然后是\(S(n,k)\),它等于\(\sum\limits_{i=1}^{n}\mu(i)[gcd(i,k)==1]\)

反演一下\(S(n,k)=\sum\limits_{i=1}^{n}\mu(i)\sum\limits_{d|i,d|k}\mu(d)\)

优先枚举\(d\),得到\(S(n,k)=\sum\limits_{d|k}\mu(d)\sum\limits_{d|i}\mu(i)\)

将后面改为枚举倍数\(S(n,k)=\sum\limits_{d|k}\mu(d)\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\mu(id)\)

根据莫比乌斯函数性质,当且仅当\(i⊥d\)时\(\mu(id)\)不为\(0\),所以\(S(n,k)=\sum\limits_{d|k}\mu(d)^2\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\mu(i)[i⊥d]\)

发现后面这个其实就是\(S(\lfloor\frac{n}{d}\rfloor,d)\),那么就可以递归求解了

但是递归边界\(d=1\)时怎么办呢

\(S(n,1)=\sum\limits_{i=1}^{n}\mu(i)[gcd(i,1)==1]=\sum\limits_{i=1}^{n}\mu(i)\),这不就是杜教筛吗!

那么
\[\sum\limits_{d=1}^{n}[gcd(d,k)==1]\mu(d)\lfloor\frac{n}{d}\rfloor f(\lfloor\frac{m}{d}\rfloor)\]
就可以除法分块解决了

标签:lfloor,洛谷,limits,sum,rfloor,mu,NOI2016,frac,P1587
来源: https://www.cnblogs.com/knife-rose/p/12024490.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有