*LOJ#2085. 「NOI2016」循环之美
$n \leq 1e9,m \leq 1e9,k \leq 2000$,求$k$进制下$\frac{x}{y}$有多少种不同的纯循环数取值,$1 \leq x \leq n,1 \leq y \leq m$。纯循环数是指小数点后直接就开始循环,整数也算。
与上个题的丑陋相比这个题不知道美到哪里去。。虽然自己没想出来。
提示说了,出现相同余数时有纯循环。假设循环节是$l$,那么$xk^l$和$x$除$y$会得到相同余数--同余!$xk^l \equiv x (\mod y)$。由于题目要互不相同的,所以$x$和$y$互质,有逆元。两边同乘$x$的逆元,得$k^l \equiv 1 (\mod y)$,存在这样的$l$,由欧拉定理得只需$k$与$y$互质即可。可以开始推式子。
$\\ \sum_{x=1}^{n}\sum_{y=1}^m[(x,y)=1][(k,y)=1]$
$\\ =\sum_{y=1}^{m}[(k,y)=1]\sum_{x=1}^{n}[(x,y)=1]$
$\\ =\sum_{y=1}^{m}[(k,y)=1]\sum_{x=1}^{n}\sum_{d|x,d|y}\mu(d)$
$\\ =\sum_{y=1}^{m}[(k,y)=1]\sum_{d|y}\mu(d)\left \lfloor \frac{n}{d} \right \rfloor$
$\\ =\sum_{d=1}^{m}\mu(d)\left \lfloor \frac{n}{d} \right \rfloor\sum_{d|y,y \leq m}[(k,y)=1]$
$\\ =\sum_{d=1}^{m}\mu(d)\left \lfloor \frac{n}{d} \right \rfloor\sum_{i=1}^{\left \lfloor \frac{m}{d} \right \rfloor}[(k,i)=1][(k,d)=1]$
$\\ =\sum_{d=1}^{min(n,m)}\mu(d)\left \lfloor \frac{n}{d} \right \rfloor[(k,d)=1]\sum_{i=1}^{\left \lfloor \frac{m}{d} \right \rfloor}[(k,i)=1]$
可以发现$f(t)=\sum_{i=1}^t[(k,i)=1]=\left \lfloor \frac{t}{k} \right \rfloor f(k)+f(t \mod k)$。这样就可以O(1)算后面那坨,在min(n,m)的时间内得到84分。
1 //#include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 //#include<math.h> 5 //#include<set> 6 //#include<queue> 7 //#include<bitset> 8 //#include<vector> 9 #include<algorithm> 10 #include<stdlib.h> 11 using namespace std; 12 13 #define LL long long 14 int qread() 15 { 16 char c; int s=0,f=1; while ((c=getchar())<'0' || c>'9') (c=='-') && (f=-1); 17 do s=s*10+c-'0'; while ((c=getchar())>='0' && c<='9'); return s*f; 18 } 19 20 //Pay attention to '-' , LL and double of qread!!!! 21 22 int n,m,K; 23 int f[2011]; 24 25 #define maxm 20000011 26 int miu[maxm],prime[maxm],lp=0; bool notprime[maxm]; 27 void pre(int n) 28 { 29 miu[1]=1; 30 for (int i=2;i<=n;i++) 31 { 32 if (!notprime[i]) {prime[++lp]=i; miu[i]=-1;} 33 for (int tmp,j=1;j<=lp && 1ll*i*prime[j]<=n;j++) 34 { 35 notprime[tmp=i*prime[j]]=1; 36 if (i%prime[j]) miu[tmp]=-miu[i]; 37 else {miu[tmp]=0; break;} 38 } 39 } 40 } 41 42 int gcd(int a,int b) {while (b^=a^=b^=a%=b); return a;} 43 int getf(int x) {return x/K*f[K]+f[x%K];} 44 45 int main() 46 { 47 n=qread(); m=qread(); K=qread(); 48 for (int i=1;i<=K;i++) f[i]=f[i-1]+(gcd(i,K)==1); 49 pre(min(n,m)); 50 LL ans=0; 51 for (int i=1,to=min(n,m);i<=to;i++) if ((i%K>0) && (f[i%K]-f[(i-1)%K])>0) 52 ans+=miu[i]*(n/i)*1ll*getf(m/i); 53 printf("%lld\n",ans); 54 return 0; 55 }
View Code
前面有个$\left \lfloor \frac{n}{d} \right \rfloor$是可以分块枚举的,如果能求快一点对所有$t=\left \lfloor \frac{n}{d} \right \rfloor$求出$g(t,k)=\sum_{i=1}^t[(i,k)=1]\mu(i)$就好了。
!$k=p^cq$,设$p$为$k$的一个质因子,则$k$可以这么表示,其中$(q,p)=1$。要求与$k$互质的,那就求与$q$互质的,挑掉与$p$不互质和与$q$互质的。与$p$不互质的有一定是$p$的倍数,因为$p$是质数嘛。所以
$\\ g(t,k)=\sum_{i=1}^{t}[(k,i)=1]\mu(i)$
$\\ =\sum_{i=1}^{t}[(i,q)=1]\mu(i)-\sum_{j=1}^{\left \lfloor \frac{t}{p} \right \rfloor}[(jp,q)=1]\mu(jp)$
$\\ =g(t,q)-\mu(p)g(\left \lfloor \frac{t}{p} \right \rfloor,q)$
$\\ =g(t,q)+g(\left \lfloor \frac{t}{p} \right \rfloor,q)$
建立一个根号复杂度的递推关系,$k$那一维的数量是常数级别的,毕竟2000以内质因子最多的数也没几个质因子。递归边界的话,如果t=0直接返回0,如果k=1那就是$\mu$的前缀和,需要再写一个杜教筛对所有n除以d的下取整数值的$\mu$前缀和处理出来。
转载于:https://www.cnblogs.com/Blue233333/p/9253286.html
*LOJ#2085. 「NOI2016」循环之美相关推荐
- 【LOJ】#2085. 「NOI2016」循环之美
题解 我们要求的其实是这个东西= = \(\sum_{i = 1}^{n}\sum_{j = 1}^{n}[(i,j) == 1][(j,k) == 1]\) 然后变一下形 \(\sum_{j = 1 ...
- 「NOI2016」循环之美 解题报告
「NOI2016」循环之美 对于小数\(\frac{a}{b}\),如果它在\(k\)进制下被统计,需要满足要求并且不重复. 不重复我们确保这个分数是最简分数即\((a,b)=1\) 满足要求需要满足 ...
- LOJ 2085: 洛谷 P1587: bzoj 4652: 「NOI2016」循环之美
题目传送门:LOJ #2085. 两个月之前做的傻题,还是有必要补一下博客. 题意简述: 求分子为不超过 \(n\) 的正整数,分母为不超过 \(m\) 的正整数的所有互不相等的分数中,有多少在 \( ...
- Loj #3111. 「SDOI2019」染色
Loj #3111. 「SDOI2019」染色 题目描述 给定 \(2 \times n\) 的格点图.其中一些结点有着已知的颜色,其余的结点还没有被染色.一个合法的染色方案不允许相邻结点有相同的染色 ...
- Loj #3055. 「HNOI2019」JOJO
Loj #3055. 「HNOI2019」JOJO JOJO 的奇幻冒险是一部非常火的漫画.漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」. 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 ...
- LOJ#2230. 「BJOI2014」大融合
LOJ#2230. 「BJOI2014」大融合 题目描述 小强要在$N$个孤立的星球上建立起一套通信系统.这套通信系统就是连接$N$个点的一个树.这个树的边是一条一条添加上去的. 在某个时刻,一条边的 ...
- loj#2143. 「SHOI2017」组合数问题
loj#2143. 「SHOI2017」组合数问题 题目描述 Solution 考虑转化一下我们要求的东西. ∑i=0n(nkik+r)=∑i=0n(nki)[i≡r(modk)]\sum_{i=0} ...
- LOJ#2542. 「PKUWC2018」随机游走
LOJ#2542. 「PKUWC2018」随机游走 题目描述 Solution 去过一个点集中所有节点的期望时间不好求,考虑min−maxmin-maxmin−max容斥,转化为求第一次到达某一个点集 ...
- LOJ#2145. 「SHOI2017」分手是祝愿
LOJ#2145. 「SHOI2017」分手是祝愿 题目描述 Solution 首先有一个结论: 灯的状态序列a1,a2...ana_1,a_2...a_na1,a2...an唯一对应了一个最优 ...
最新文章
- 架构探险笔记7-事务管理简介
- Oracle高级查询之OVER (PARTITION BY ..)
- 当下数据中心业务面临哪些重大威胁?
- optee的Share Memory介绍
- 快速开发插件emmet,前端程序员炫技必备!
- POI的入门:创建单元格设置数据
- 洛谷 - P4390 [BOI2007]Mokia 摩基亚(带修二维数点-四叉线段树/CDQ分治)
- form表单回车提交问题
- Python FastApi:post文件与数据/本地端测试
- 【信号】函数kill、raise、abort、alarm
- ajax请求数据 ztree_ajax 异步获取数据填充到表格显示(ajax) 文档(Options API) DataTables中文网...
- 苹果为提振销量疯狂试探!官网推出新福利:买买买更轻松
- python输入流和输出流_Python 初体验之 输入输出流
- Mysql密码加密方式
- android中的适配器模式
- Atitit 软件体系重要理论学科 v2 s67.docx Atitit 软件重要理论学科 目录 1. 计算理论这门学问	2 1.1. 学科的产生	2 1.2. 在这些领域中,自动机理论和形式语言理论
- java并发包aqu_Java并发包之SynchronousQueue
- 【详解】BiLSTM+CRF模型
- linux可执行文件在window,教你如何在windows下编译linux生成windows的可执行程序
- [笔记]unity渲染相关各种方案总结
热门文章
- openwrt l7过滤qos配置
- C++11: chrono
- 我去,JS自执行匿名函数竟然有20几种写法!
- 数据结构源码笔记(C语言):二叉平衡树的相关操作算法
- python导入pandas出错_构建d时如何解决python-pandas导入错误
- const的使用 || 对象增强写法 (对象字面量)
- Java 技术篇-利用ClipboardOwner实现实时监听剪切板功能实例演示
- 达梦数据库、oracle数据库如何判断指定表有没有建立索引?对应的表有没有索引查询方法
- 湫湫系列故事——消灭兔子
- STM32 HAL库--串口的DMA(发送、接收)和esp8266 wifi模组发送和接收封装函数