$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」循环之美相关推荐

  1. 【LOJ】#2085. 「NOI2016」循环之美

    题解 我们要求的其实是这个东西= = \(\sum_{i = 1}^{n}\sum_{j = 1}^{n}[(i,j) == 1][(j,k) == 1]\) 然后变一下形 \(\sum_{j = 1 ...

  2. 「NOI2016」循环之美 解题报告

    「NOI2016」循环之美 对于小数\(\frac{a}{b}\),如果它在\(k\)进制下被统计,需要满足要求并且不重复. 不重复我们确保这个分数是最简分数即\((a,b)=1\) 满足要求需要满足 ...

  3. LOJ 2085: 洛谷 P1587: bzoj 4652: 「NOI2016」循环之美

    题目传送门:LOJ #2085. 两个月之前做的傻题,还是有必要补一下博客. 题意简述: 求分子为不超过 \(n\) 的正整数,分母为不超过 \(m\) 的正整数的所有互不相等的分数中,有多少在 \( ...

  4. Loj #3111. 「SDOI2019」染色

    Loj #3111. 「SDOI2019」染色 题目描述 给定 \(2 \times n\) 的格点图.其中一些结点有着已知的颜色,其余的结点还没有被染色.一个合法的染色方案不允许相邻结点有相同的染色 ...

  5. Loj #3055. 「HNOI2019」JOJO

    Loj #3055. 「HNOI2019」JOJO JOJO 的奇幻冒险是一部非常火的漫画.漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」. 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 ...

  6. LOJ#2230. 「BJOI2014」大融合

    LOJ#2230. 「BJOI2014」大融合 题目描述 小强要在$N$个孤立的星球上建立起一套通信系统.这套通信系统就是连接$N$个点的一个树.这个树的边是一条一条添加上去的. 在某个时刻,一条边的 ...

  7. loj#2143. 「SHOI2017」组合数问题

    loj#2143. 「SHOI2017」组合数问题 题目描述 Solution 考虑转化一下我们要求的东西. ∑i=0n(nkik+r)=∑i=0n(nki)[i≡r(modk)]\sum_{i=0} ...

  8. LOJ#2542. 「PKUWC2018」随机游走

    LOJ#2542. 「PKUWC2018」随机游走 题目描述 Solution 去过一个点集中所有节点的期望时间不好求,考虑min−maxmin-maxmin−max容斥,转化为求第一次到达某一个点集 ...

  9. LOJ#2145. 「SHOI2017」分手是祝愿

    LOJ#2145. 「SHOI2017」分手是祝愿 题目描述 Solution 首先有一个结论: 灯的状态序列a1,a2...ana_1,a_2...a_na1​,a2​...an​唯一对应了一个最优 ...

最新文章

  1. 架构探险笔记7-事务管理简介
  2. Oracle高级查询之OVER (PARTITION BY ..)
  3. 当下数据中心业务面临哪些重大威胁?
  4. optee的Share Memory介绍
  5. 快速开发插件emmet,前端程序员炫技必备!
  6. POI的入门:创建单元格设置数据
  7. 洛谷 - P4390 [BOI2007]Mokia 摩基亚(带修二维数点-四叉线段树/CDQ分治)
  8. form表单回车提交问题
  9. Python FastApi:post文件与数据/本地端测试
  10. 【信号】函数kill、raise、abort、alarm
  11. ajax请求数据 ztree_ajax 异步获取数据填充到表格显示(ajax) 文档(Options API) DataTables中文网...
  12. 苹果为提振销量疯狂试探!官网推出新福利:买买买更轻松
  13. python输入流和输出流_Python 初体验之 输入输出流
  14. Mysql密码加密方式
  15. android中的适配器模式
  16. Atitit 软件体系重要理论学科 v2 s67.docx Atitit 软件重要理论学科 目录 1. 计算理论这门学问 2 1.1. 学科的产生 2 1.2. 在这些领域中,自动机理论和形式语言理论
  17. java并发包aqu_Java并发包之SynchronousQueue
  18. 【详解】BiLSTM+CRF模型
  19. linux可执行文件在window,教你如何在windows下编译linux生成windows的可执行程序
  20. [笔记]unity渲染相关各种方案总结

热门文章

  1. openwrt l7过滤qos配置
  2. C++11: chrono
  3. 我去,JS自执行匿名函数竟然有20几种写法!
  4. 数据结构源码笔记(C语言):二叉平衡树的相关操作算法
  5. python导入pandas出错_构建d时如何解决python-pandas导入错误
  6. const的使用 || 对象增强写法 (对象字面量)
  7. Java 技术篇-利用ClipboardOwner实现实时监听剪切板功能实例演示
  8. 达梦数据库、oracle数据库如何判断指定表有没有建立索引?对应的表有没有索引查询方法
  9. 湫湫系列故事——消灭兔子
  10. STM32 HAL库--串口的DMA(发送、接收)和esp8266 wifi模组发送和接收封装函数