\(\text{Problem}\)

\[\sum_{i=1}^n \sum_{d|n} \gcd(d, \frac{i}{d})
\]

有 \(n \le 10^{11}\)

\(\text{Analysis}\)

一眼就知道要欧拉反演(虽然考场写了莫反)

那么就要套路套路地推式子了

先给出欧拉反演的一般形式

\[n = \sum_{d|n} \varphi(d)
\]

然后对题目中的式子推导一波

\[\begin{aligned}
\sum_{i=1}^n \sum_{d|i} \gcd(d, \frac{i}{d})
&= \sum_{xy \le n} \gcd(x,y) \\
&= \sum_{xy \le n} \sum_{d|\gcd(x,y)} \varphi(d) \\
&= \sum_{d=1}^{\sqrt n} \varphi(d) \sum_{d|x} \sum_{d|y} 1 \\
&= \sum_{d=1}^{\sqrt n} \varphi(d) \sum_{x=1}^{\lfloor \frac{n}{d^2} \rfloor} \lfloor \frac{n}{xd^2} \rfloor\\
\end{aligned}
\]

发现这个式子后面可以数论分块

然后直接计算复杂度是 \(O(\sqrt n \log \sqrt n)\)

可以通过 \(10^{11}\)

\(\text{Code}\)

#include<cstdio>
#define LL long long
using namespace std; LL n; int vis[1000005], prime[600005], phi[1000005], totp;
inline void Euler()
{
vis[1] = 1, phi[1] = 1;
for(register int i = 2; i <= 1e6; i++)
{
if (!vis[i]) prime[++totp] = i, phi[i] = i - 1;
for(register int j = 1; j <= totp && prime[j] * i <= 1e6; j++)
{
vis[prime[j] * i] = 1;
if (i % prime[j]) phi[prime[j] * i] = (prime[j] - 1) * phi[i];
else{phi[prime[j] * i] = prime[j] * phi[i]; break;}
}
}
} inline LL solve()
{
LL sum = 0;
for(register LL d = 1; d * d <= n; d++)
{
LL s = 0, m = n / d / d, j;
for(register LL i = 1; i * d * d <= n; i = j + 1)
{
j = m / (m / i);
s += (j - i + 1) * (m / i);
}
sum += phi[d] * s;
}
return sum;
} int main()
{
freopen("gcd.in", "r", stdin), freopen("gcd.out", "w", stdout);
Euler(), scanf("%lld", &n), printf("%lld\n", solve());
}

因为原式是一个 \(\gcd\) 的形式,一个数算入贡献

所以我们走欧拉反演的路

但考场看到 \(\gcd\) 直接走莫反了

于是推了这么一个东西

\[\sum_{d=1}^{\sqrt n} \sum_{k=1}^{\sqrt \lfloor \frac{n}{d^2} \rfloor} \mu(k) \sum_{i=1}^{\lfloor \frac{n}{d^2k^2} \rfloor} \lfloor \frac{n}{id^2k^2} \rfloor
\]

单单数论分快暴力跑显然过不了

发现可以预处理后面一坨式子,因为 \(d^2k^2\) 的取值只有 \(O(\sqrt n)\) 种

JZOJ 4496. 【GDSOI 2016】第一题 互补约数的更多相关文章

  1. 2016/1/12 第一题 输出 i 出现次数 第二题 用for循环和if条件句去除字符串中空格 第三题不用endwith 实现尾端字符查询

    import java.util.Scanner; public class Number { private static Object i; /* *第一题 mingrikejijavabu中字符 ...

  2. [算法 笔记]2014年去哪儿网 开发笔试(续)第一题BUG修正

    上一篇的blog地址为:http://www.cnblogs.com/life91/p/3313868.html 这几天又参加了一个家公司的笔试题,在最后的编程题中竟然出现了去哪儿网开发的第一题,也就 ...

  3. 《学习OpenCV》练习题第五章第一题ab

    这道题是载入一幅带有有趣纹理的图像并用不同的模板(窗口,核)大小做高斯模糊(高斯平滑),然后比较用5*5大小的窗口平滑图像两次和用11*11大小的窗口平滑图像一次是否接近相同. 先说下我的做法,a部分 ...

  4. 《学习OpenCV》练习题第四章第一题b&c

    #include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...

  5. 《学习OpenCV》练习题第四章第一题a

    #include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...

  6. Google Code Jam 第一题

    通过的第一题,留做纪念,呵呵,非常简单,Africa 2010, Qualification Round: Store Credit. #include <stdio.h> #includ ...

  7. 图论测试题(一)第一题:longest

    第一题:longest 乌托邦有n个城市,某些城市之间有公路连接.任意两个城市都可以通过公路直接或者间接到达,并且任意两个城市之间有且仅有一条路径(What does this imply? A tr ...

  8. ZOJ 2334(Monkey King-左偏树第一题)

    Monkey King Time Limit: 10 Seconds      Memory Limit: 32768 KB Once in a forest, there lived N aggre ...

  9. BZOJ 3172([Tjoi2013]单词-后缀数组第一题+RMQ)

    3172: [Tjoi2013]单词 Time Limit: 10 Sec   Memory Limit: 512 MB Submit: 268   Solved: 145 [ Submit][ St ...

  10. NOIP2005-普及组复赛-第一题-陶陶摘苹果

    题目描述 Description 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳 ...

随机推荐

  1. 关于Wegame页面空白的问题解决

    前言 前几天帮亲戚家装电脑系统,装好后发现 wegame 所有页面都不能正确加载(全部是空白页面),很神奇,在网上找了很多种解决办法都没有效果,后来不过细心的我发现360浏览器一直提示我证书不安全过期 ...

  2. Datawhale组队学习_Task03:详读西瓜书+南瓜书第4章

    第4章 决策树 4.1 基本流程 #输入:训练集D={${(x_1,y_1),(x_2,y_2),...,(x_m,y_m)}$}; #属性集A=${{a_1,a_2,...,a_d}}$. #过程: ...

  3. SUPERVISOR监控tomcat配置文件

    Supervisor安装教程参考:https://www.cnblogs.com/brad93/p/16639953.html tomcat安装教程参考:https://www.cnblogs.com ...

  4. 盘点JAVA中基于CAS实现的原子类, 你知道哪些?

    前言 JDK中提供了一系列的基于CAS实现的原子类,CAS 的全称是Compare-And-Swap,底层是lock cmpxchg指令,可以在单核和多核 CPU 下都能够保证比较交换的原子性.所以说 ...

  5. vue3 el-pagination 将 英文 修改 为 中文

    当前视图: 我要做的是将 Total 类似的 英文 改为 中文 1.  在组件里引入  ElConfigProvider 组件 和中文包 // ElConfigProvider 组件 import { ...

  6. DC-9靶场练习

    Vulnhub靶场-DC-9 准备工作 kali和靶机都选择NAT模式(kali与靶机同网段) 下载链接:https://download.vulnhub.com/dc/DC-9.zip 一.主机发现 ...

  7. 第三篇:前端基础之JavaScript

    前端基础之JavaScript   JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaS ...

  8. JavaScript:对象:如何判断对象是否有某个属性?操作符in

    使用in运算符来判断,有返回true,没有返回false:

  9. 2022年7月13日,第四组,周鹏,JS做计算器代码

    代码不难,看了我前面笔记的应该能看懂. 没看?(= ̄ω ̄=)喵了个咪(๑‾᷅^‾᷅๑) 嫌弃你 还看啥,去看啊!要不直接复制代码吧!( ̄へ ̄)( ̄へ ̄)( ̄へ ̄) Document 0 / * - 7 ...

  10. 再聊一下那 SQLSERVER 行不能跨页的事

    一:背景 1. 讲故事 上一篇写完了之后,马上就有朋友留言对记录行的 8060byte 限制的疑惑,因为他的表记录存储了大量的文章,存储文章的字段类型用的是 nvarchar(max),长度很显然是超 ...