https://www.luogu.com.cn/problem/P1587

首先思考我们要求的是什么?

{xkly}={xy}\large \begin{Bmatrix}\frac{xk^l}{y}\end{Bmatrix} =\begin{Bmatrix}\frac{x}{y}\end{Bmatrix}{yxkl​​}={yx​​}

xkl−y[xkly]=x−y[xy]\large xk^l-y \begin{bmatrix}\frac{xk^l}{y} \end{bmatrix}=x-y \begin{bmatrix}\frac{x}{y} \end{bmatrix}xkl−y[yxkl​​]=x−y[yx​​]
kl≡1(mody)k^l \equiv 1 (\mod y)kl≡1(mody)

可以得到我们实际上要求的是

∑i=1n∑j=1m[i⊥j][j⊥k]\sum_{i=1}^n\sum_{j=1}^m [i\perp j] [j \perp k]i=1∑n​j=1∑m​[i⊥j][j⊥k]

按照套路

∑d=1min(n,m)μ(d)∑i=1n/d∑j=1m/d[jd⊥k]\large \sum\limits_{d=1}^{min(n, m)} \mu(d) \sum\limits_{i=1}^{n/d} \sum\limits_{j=1}^{m/d} [jd \perp k]d=1∑min(n,m)​μ(d)i=1∑n/d​j=1∑m/d​[jd⊥k]

=∑d=1min(n,m)μ(d)(n/d)∑j=1m/d[j⊥k][d⊥k]\large = \sum\limits_{d=1}^{min(n, m)} \mu(d) (n/d) \sum\limits_{j=1}^{m/d} [j \perp k][d \perp k]=d=1∑min(n,m)​μ(d)(n/d)j=1∑m/d​[j⊥k][d⊥k]

设g(n)=∑i=1n[i⊥k]g(n)=\sum\limits_{i=1}^n [i\perp k]g(n)=i=1∑n​[i⊥k]

容易发现g(n)=(n/k)ϕ(k)+g(nmodk)g(n)=(n/k) \phi(k)+g(n \mod k)g(n)=(n/k)ϕ(k)+g(nmodk)
上式子

=∑d=1min(n,m)(n/d)g(m/d)μ(d)[d⊥k]\large = \sum\limits_{d=1}^{min(n, m)} (n/d) g(m/d) \mu(d) [d \perp k]=d=1∑min(n,m)​(n/d)g(m/d)μ(d)[d⊥k]
前两项显然可以整除分块,现在要计算的是后两项的区间和

记f(n)=∑i=1nμ(i)[i⊥k]f(n)=\sum\limits_{i=1}^n \mu(i)[i \perp k]f(n)=i=1∑n​μ(i)[i⊥k]

区间和就可以表示为f(r)−f(l−1)f(r)-f(l-1)f(r)−f(l−1)

考虑怎么快速计算fff

发现是两个积性函数卷在一起,还是一个积性函数

我们考虑让它卷上[i⊥k][i \perp k][i⊥k]

得到杜教筛的那条式子

f(n)=∑i=1n[i⊥k]f(n/i)−∑i=2n[i⊥k]f(n/i)\large f(n)=\sum\limits_{i=1}^n[i \perp k] f(n/i)-\sum\limits_{i=2}^n[i\perp k] f(n/i)f(n)=i=1∑n​[i⊥k]f(n/i)−i=2∑n​[i⊥k]f(n/i)

考虑前面那一部分怎么算?

∑i=1n[i⊥k]∑j=1n/iμ(j)[j⊥k]\sum\limits_{i=1}^n[i \perp k] \sum\limits_{j=1}^{n/i}\mu(j)[j\perp k]i=1∑n​[i⊥k]j=1∑n/i​μ(j)[j⊥k]
=∑i=1n∑j=1n/iμ(j)[ij⊥k]=\sum\limits_{i=1}^n\sum\limits_{j=1}^{n/i}\mu(j)[ij\perp k]=i=1∑n​j=1∑n/i​μ(j)[ij⊥k]

考虑枚举ijijij

∑i=1n∑d∣iμ(d)[i⊥k]\sum\limits_{i=1}^n \sum\limits_{d|i}\mu(d)[i\perp k]i=1∑n​d∣i∑​μ(d)[i⊥k]
∑i=1n[i⊥k]∑d∣iμ(d)=1\sum\limits_{i=1}^n[i\perp k] \sum\limits_{d|i} \mu(d)=1i=1∑n​[i⊥k]d∣i∑​μ(d)=1

于是乎就得到了

f(n)=1−∑i=2n[i⊥k]f(n/i)\large f(n)=1-\sum\limits_{i=2}^n[i\perp k] f(n/i)f(n)=1−i=2∑n​[i⊥k]f(n/i)

而f(n/i)f(n/i)f(n/i)前面那个在整除分块的时候就是ggg
大力杜教筛即可

code:

#include<bits/stdc++.h>
#define ll long long
#define N 5000050
using namespace std;
int gcd(int x, int y) {return y? gcd(y, x % y) : x;
}
int g[N], f[N], mu[N], n, m, k, prime[N], sz, vis[N];
ll G(int n) {return 1ll * (n / k) * g[k] + g[n % k];
}
const int lim = 5000000;
void init(int n) {for(int i = 1; i <= k; i ++) g[i] = g[i - 1] + (gcd(i, k) == 1);f[1] = mu[1] = 1;for(int i = 2; i <= n; i ++) {if(!vis[i]) {prime[++ sz] = i;mu[i] = -1;}for(int j = 1; j <= sz && i * prime[j] <= n; j ++) {vis[i * prime[j]] = 1;if(i % prime[j] == 0) break;mu[i * prime[j]] = - mu[i];}f[i] = f[i - 1] + mu[i] * (G(i) - G(i - 1));}
}
map<int, ll> sf;
ll F(int n) {if(n <= lim) return f[n];if(sf[n]) return sf[n];ll ret = 1;for(int l = 2, r = 0; l <= n; l = r + 1) {r = n / (n / l);ret -= F(n / l) * (G(r) - G(l - 1)); } return sf[n] = ret;
}
int main() {scanf("%d%d%d", &n, &m, &k);init(lim);ll ans = 0;for(int l = 1, r = 0; l <= min(n, m); l = r + 1) {r = min(n / (n / l), m / (m / l));ans += 1ll * (n / l) * G(m / l) * (F(r) - F(l - 1));}printf("%lld", ans);return 0;
}

luogu P1587 [NOI2016] 循环之美相关推荐

  1. [NOI2016]循环之美(杜教筛)

    首先要求每个数互不相等,故有$x\perp y$. 可以发现$\frac{x}{y}$在$k$进制下为纯循环小数的充要条件为$x\cdot k^{len}\equiv x(mod\ y)$,即$y\p ...

  2. Noi2016 循环之美

    题意相当于求如下式子 $$ \sum _{i=1}^{n} \sum_{j=1}^{m} [gcd(i,j)=1][gcd(j,k)=1] \\ k <= 1000 ; n,m <= 10 ...

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

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

  4. UOJ #219 BZOJ 4650 luogu P1117 [NOI2016]优秀的拆分 (后缀数组、ST表)

    UOJ #219 BZOJ 4650 luogu P1117 [NOI2016]优秀的拆分 (后缀数组.ST表) 连NOI Day1T1都不会做...看了题解都写不出来还要抄Claris的代码.. 题 ...

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

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

  6. *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 ...

  7. 【NOI2016】循环之美【莫比乌斯反演】【整除分块】【杜教筛】【类杜教筛】

    传送门 题意:给定n,m,kn,m,kn,m,k,求1≤x≤n,1≤y≤m1\leq x\leq n,1\leq y\leq m1≤x≤n,1≤y≤m时xyx \over yyx​中数值不同的纯循环小 ...

  8. 【NOI2016】循环之美,mobius反演+杜教筛

    思路: 对于xy\frac x y,我们肯定让gcd(x,y)=1\gcd(x,y)=1,因为这样计算不会重复,而且比不互质时更优,且只要余数出现重复就是有循环节了,根据十进制小数转k进制的方法,我们 ...

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

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

最新文章

  1. 关于oracle spfile配置文件问题
  2. 独家 | 提速20倍!3个细节优化Tableau工作簿加载过程(附实例)
  3. SAP CRM IBASE Solution manager callstack
  4. PHP文件系统-文件下载
  5. JS在页面限制checkbox最大复选数
  6. java按照商品价格排序_按照指定的类型排序
  7. Linux系统:centos7下搭建ElasticSearch中间件,常用接口演示
  8. linux crypto cbc 接口,Linux 2.6.38.4: User-space interface for Crypto API
  9. 【状压DP】poj2686 Traveling by Stagecoach
  10. Windows 8 Beta 64位 简体中文 消费者预览版 安装截图(30P)
  11. 可串联使用的模10计数器
  12. Matlab中使用varargin来实现参数可变的函数
  13. 谷歌浏览器访问网站无法加载验证码图片问题
  14. 批处理删除文件夹下所有文件和文件夹
  15. 《Dreamweaver CS6 完全自学教程》笔记 第四章:创建站点
  16. 吉林大学高级程序设计(红皮书)(最后几章)
  17. 大佬H5网页手机端怎么应用微信快捷登陆?
  18. Ubuntu 16.04 编译Android 6.0系统源码
  19. 联通4G业务或沿用沃品牌 不推无限量套餐
  20. Dockers(六)- Docker镜像使用

热门文章

  1. 编程语言选型:你需要了解的二三事
  2. 提示用户此计算机没有授权,怎么解决电脑“未授权用户在此计算机上的
  3. 菲尼克斯模块QUINT4-DIODE/12-24DC/2X20/1X40
  4. TensorFlow2.0实战项目之车道偏离预警
  5. ubunto16.04 mysql安装 远程连接配置
  6. 基于Android的实习招聘app设计与实现
  7. xd导出标注html,使用标记狮一键导出Adobe XD标注文件到本地如何选择[导出包支持范围]...
  8. AM335x启动流程
  9. 阿里百川SDK集成注意点
  10. 数据库原理 关系数据理论-为什么要学关系数据库理论