\(\mathcal{Description}\)

  Link.

  给定 \(n,m,k\),求 \(x\in [1,n]\cap\mathbb N,y\in [1,m]\cap \mathbb N\),且最简分数 \(\frac{x}{y}\) 在 \(k\) 进制下是纯循环小数(包括整数)的 \((x,y)\) 数量。

  \(n,m\le10^9\),\(k\le2\times10^3\)。

\(\mathcal{Solution}\)

  当你举几个十进制的纯循环小数就不难发现规律了。(

  考虑一个已有 \(x\perp y\) 的 \(\frac{x}y\),假设它是 \(k\) 进制下的纯循环小数,且循环节长度为 \(l\)。记 \(\{x\}\) 表示 \(x\) 的小数部分值,那么有

\[\left\{\frac{xk^l}{y}\right\}=\left\{\frac{x}{y}\right\}\\\Leftrightarrow~~~~\frac{xk^l}{y}-\left\lfloor\frac{xk^l}{y}\right\rfloor=\frac{x}{y}-\left\lfloor\frac{x}{y}\right\rfloor\\\Leftrightarrow~~~~xk^l-y\left\lfloor\frac{xk^l}{y}\right\rfloor=x-y\left\lfloor\frac{x}{y}\right\rfloor\\\Leftrightarrow~~~~xk^l\equiv x\pmod y\\\Leftrightarrow~~~~k\perp y
\]

所以题目就是要求

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

  略微推一下式子嘛:

\[\begin{aligned}\sum_{i=1}^m\sum_{j=1}^n[i\perp j][i\perp k]&=\sum_{i=1}^m[i\perp k]\sum_{j=1}^n\sum_{d\mid i,d\mid j}\mu(d)\\&=\sum_{d=1}^{\min\{n,m\}}[d\perp k]\mu(d)\sum_{i=1}^{\lfloor\frac{m}{d}\rfloor}[i\perp k]\lfloor\frac{n}{d}\rfloor\\&=\sum_{d=1}^{\min\{n,m\}}[d\perp k]\mu(d)\lfloor\frac{n}{d}\rfloor\sum_{i=1}^{\lfloor\frac{m}{d}\rfloor}[i\perp k]\end{aligned}
\]

套上整除分块,分别研究两个求和,令

\[f(n)=\sum_{i=1}^n[i\perp k]\\g(n,k)=\sum_{i=1}^n[i\perp k]\mu(i)
\]

快速解决它们,就能整除分块啦。

  先考虑 \(f\),显然的事实是 \([i\perp k]=[(i\bmod k)\perp k]\),继而有

\[f(n)=\lfloor\frac{n}{k}\rfloor f(n)+f(n\bmod k)
\]

注意到 \(k\) 很小,\(\mathcal O(k)\) 预处理之后就能 \(\mathcal O(1)\) 求 \(f\) 了。

  对于 \(g\) 而言,\([i\perp k]\) 还能继续莫反——

\[\begin{aligned}g(n,k)&=\sum_{i=1}^n[i\perp k]\mu(i)\\&=\sum_{i=1}^n\mu(i)\sum_{d\mid i,d\mid k}\mu(k)\\&=\sum_{d\mid k}\mu(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\mu(id)\\&=\sum_{d\mid k}\mu(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}[i\perp d]\mu(id)~~~~*\\&=\sum_{d\mid k}(\mu(d))^2g(\lfloor\frac{n}{d}\rfloor,d)\end{aligned}
\]

其中,标注 \(*\) 的步骤同时利用 \(\mu\) 自身和积性函数普遍的性质进行“无用”转化,巧妙地完成了递推式。直接记忆化计算上式 就可以在可观的复杂度内求出 \(g\) 了,特别地,当 \(k=1\),需要用杜教筛求 \(\mu\) 的前缀和。

  复杂度据说是 \(\mathcal O(\sigma_0(k)n^{\frac{1}2}+n^{\frac{2}3})\)。

\(\mathcal{Code}\)

/* Clearink */

#include <cmath>
#include <cstdio>
#include <unordered_map> #define rep( i, l, r ) for ( int i = l, rep##i = r; i <= rep##i; ++i )
#define per( i, r, l ) for ( int i = r, per##i = l; i >= per##i; --i ) typedef long long LL; const int MAXK = 2e3, MAXS = 1e7;
int n, m, K, pn, pr[MAXS + 5];
bool vis[MAXS + 5];
int f[MAXK + 5], mu[MAXS + 5], mus[MAXS + 5]; inline int imin( const int a, const int b ) { return a < b ? a : b; }
inline int gcd( const int a, const int b ) { return b ? gcd( b, a % b ) : a; } inline LL calcF( const int n ) {
return ( n / K ) * f[K] + f[n % K];
} inline void sieve() {
mu[1] = mus[1] = 1;
rep ( i, 2, MAXS ) {
if ( !vis[i] ) mu[pr[++pn] = i] = -1;
for ( int j = 1, t; j <= pn && ( t = i * pr[j] ) <= MAXS; ++j ) {
vis[t] = true;
if ( !( i % pr[j] ) ) break;
mu[t] = -mu[i];
}
mus[i] = mu[i] + mus[i - 1];
}
} inline int calcM( const int n ) {
static std::unordered_map<int, int> mem; if ( n <= MAXS ) return mus[n];
if ( mem.count( n ) ) return mem[n]; int ret = 1;
for ( int l = 2, r; l <= n; l = r + 1 ) {
r = n / ( n / l );
ret -= ( r - l + 1 ) * calcM( n / l );
}
return mem[n] = ret;
} inline LL calcS( const int n, const int k ) {
static std::unordered_map<LL, LL> mem; if ( !n ) return 0;
if ( k == 1 ) return calcM( n );
LL h = n * 2012ll + k;
if ( mem.count( h ) ) return mem[h]; LL ret = 0;
rep ( i, 1, sqrt( 1. * k ) ) if ( !( k % i ) ) {
ret += mu[i] * mu[i] * calcS( n / i, i );
if ( i * i != k ) {
ret += mu[k / i] * mu[k / i] * calcS( n / ( k / i ), k / i );
}
}
return mem[h] = ret;
} int main() {
// freopen( "cyclic.in", "r", stdin );
// freopen( "cyclic.out", "w", stdout ); scanf( "%d %d %d", &n, &m, &K ); sieve();
rep ( i, 1, K ) f[i] = f[i - 1] + ( gcd( i, K ) == 1 ); LL ans = 0;
for ( int l = 1, r, t = imin( n, m ); l <= t; l = r + 1 ) {
r = imin( n / ( n / l ), m / ( m / l ) );
ans += ( calcS( r, K ) - calcS( l - 1, K ) )
* ( n / l ) * calcF( m / l );
} printf( "%lld\n", ans );
return 0;
}

Solution -「NOI 2016」「洛谷 P1587」循环之美的更多相关文章

  1. 洛谷P1587 [NOI2016]循环之美

    传送门 不会,先坑着 https://kelin.blog.luogu.org/solution-p1587 //minamoto #include<cstdio> #include< ...

  2. 「区间DP」「洛谷P1043」数字游戏

    「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...

  3. Solution -「APIO 2016」「洛谷 P3643」划艇

    \(\mathcal{Description}\)   Link & 双倍经验.   给定 \(n\) 个区间 \([a_i,b_i)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...

  4. Solution -「JSOI 2019」「洛谷 P5334」节日庆典

    \(\mathscr{Description}\)   Link.   给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的).   \(|S|\le3\time ...

  5. Solution -「洛谷 P4372」Out of Sorts P

    \(\mathcal{Description}\)   OurOJ & 洛谷 P4372(几乎一致)   设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...

  6. Solution -「POI 2010」「洛谷 P3511」MOS-Bridges

    \(\mathcal{Description}\)   Link.(洛谷上这翻译真的一言难尽呐.   给定一个 \(n\) 个点 \(m\) 条边的无向图,一条边 \((u,v,a,b)\) 表示从 ...

  7. 「洛谷 P1801」黑匣子

    好像很久没有更过博客了,因为博主这几周很忙.其实是在搞颓. 题意很难懂,所以就不重复了.其实是懒. 一眼看上去这是个 \(Splay\) 裸题,直接插入一个数,查询区间第 \(K\) 大,但是这样太不 ...

  8. 「洛谷4197」「BZOJ3545」peak【线段树合并】

    题目链接 [洛谷] [BZOJ]没有权限号嘤嘤嘤.题号:3545 题解 窝不会克鲁斯卡尔重构树怎么办??? 可以离线乱搞. 我们将所有的操作全都存下来. 为了解决小于等于\(x\)的操作,那么我们按照 ...

  9. 「洛谷3338」「ZJOI2014」力【FFT】

    题目链接 [BZOJ] [洛谷] 题解 首先我们需要对这个式子进行化简,否则对着这么大一坨东西只能暴力... \[F_i=\sum_{j<i} \frac{q_iq_j}{(i-j)^2}-\s ...

随机推荐

  1. java mapreduce实现网站PV分析

    原文链接: https://www.toutiao.com/i6765677128022229517/ PV 是Page Views的缩写,即页面浏览量,用户每一次对网站中的每个网页访问均被记录一次. ...

  2. Word2010制作电子印章

    原文链接: https://www.toutiao.com/i6488971642788643341/ 选择"插入"选项卡,"插图"功能组,"形状&q ...

  3. stm32单片机利用ntc热敏电阻温度转换公式C语言版

    首先 我们需要明确电路结构 热敏电阻的原理就不再赘述,本文不凑字数,只讲干货 必须要知道的就是串联电阻R9程序中定义为resistanceInSeries ,精度越高越好 为了方便,先在程序中定义好你 ...

  4. 《剑指offer》面试题15. 二进制中1的个数

    问题描述 请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数.例如,把 9 表示成二进制是 1001,有 2 位是 1.因此,如果输入 9,则该函数输出 2. 示例 1: 输入:00000 ...

  5. jQuery ajax get与post后台交互中的奥秘

    这两天在做关注功能模块(类似于Instagram).多处页面都需要通过一个"关注"按钮进行关注或者取消该好友的操作.一个页面对应的放一个按钮,进行操作.效率低维护性差.因此想通过j ...

  6. 返回值Student-Json

    MyController中 index.jsp 修改url

  7. 科技爱好者周刊(第 175 期):知识广度 vs 知识深度

    这里记录每周值得分享的科技内容,周五发布. 本杂志开源(GitHub: ruanyf/weekly),欢迎提交 issue,投稿或推荐科技内容. 周刊讨论区的帖子<谁在招人?>,提供大量程 ...

  8. Nginx请求连接限制

    目录 Nginx的请求限制 HTTP协议的连接与请求 连接限制 配置示例 做个演示: 请求限制 配置示例 基本指令 limit_req_zone limit_req zone 做个演示: Nginx的 ...

  9. 用c#实现编写esp32单片机获取DHT11温度传感器参数

    欢迎爱好c#的爱好者,本文章我们将用C#的nanoframework框架来编写获取esp32单片机上的DHT11传感器的温度和湿度 实现我们需要准备配置好esp32的环境可以看看之前写的esp32搭建 ...

  10. 随机IP代理插件Scrapy-Proxies

    安装: pip install scrapy_proxies github:   https://github.com/aivarsk/scrapy-proxies scrapy爬虫配置文件setti ...