HDU 6588 Function
求$$\sum_{i=1}^{n} \gcd(\lfloor \sqrt[3]{i} \rfloor, i)$$
题解写的很清楚,自己重新推一推。
$$\sum_{i=1}^{n} \gcd(\lfloor \sqrt[3]{i} \rfloor, i)$$
$$=\sum_{a=1}^{\lfloor\sqrt[3]{n}\rfloor}\sum_{i=1}^{n}\gcd(a, i)[\sqrt[3]{i}=a]$$
$$=\sum_{a=1}^{\lfloor\sqrt[3]{n}\rfloor}\sum_{i=a^3}^{\min\{(a+1)^3-1,n\}}\gcd(a,i)$$
$$=\sum_{i=\lfloor \sqrt[3]{n} \rfloor ^3}^{n}\gcd(\sqrt[3]{n}, i)+\sum_{a=1}^{r}\sum_{i=a^3}^{(a+1)^3-1}\gcd(a,i)$$
其中 $r = \sqrt[3]{n}-1$
设 $f(n,a)=\sum_{i=1}^{n}\gcd(i, a)$
$$f(n,a)=\sum_{i=1}^{n}\gcd(i,a)$$
$$=\sum_{d|a}d\sum_{i=1}^{n}[\gcd(i,a)=d]$$
$$=\sum_{d|a}d\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}[\gcd(i, \frac{a}{d}) =1]$$
$$=\sum_{d|a}d\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{p|\gcd(i,\frac{a}{d})}\mu(p)$$
$$=\sum_{d|a}d\sum_{p|\frac{a}{d}}\mu(p)\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}[p|i]$$
$$=\sum_{d|a}d\sum_{p|\frac{a}{d}}\mu(p)\lfloor \frac{n}{pd} \rfloor$$
$$=\sum_{T|a}\lfloor \frac{n}{T}\rfloor\sum_{p|T}\mu(p)\frac{T}{p}$$
$$=\sum_{T|a}\lfloor \frac{n}{T}\rfloor \varphi(T)$$
第一部分可以 $O(\sqrt{n})$ 解决。
将 $f(n, a)$ 带入第二部分得
$$\sum_{a=1}^r \sum_{i=a}^{(a+1)^3-1}\gcd(a,i)$$
$$=\sum_{a=1}^{r}\sum_{T|a}(\lfloor\frac{(a+1)^3-1}{T}\rfloor - \lfloor\frac{a^3-1}{T}\rfloor)\varphi(T)$$
$$=\sum_{T = 1}^{r}\varphi(T)\sum_{b=1}^{\lfloor\frac{r}{T}\rfloor}(\lfloor\frac{(bT+1)^3-1}{T} \rfloor-\lfloor\frac{(bT)^3-1}{T} \rfloor)$$
$$=\sum_{T=1}^{r}\varphi(T)\sum_{b=1}^{\lfloor\frac{r}{T}\rfloor}(\lfloor b^3T^2+3b^2T+3b\rfloor-\lfloor b^3T^2-\frac{1}{T}\rfloor)$$
$$=\sum_{T=1}^{r}\varphi(T)\sum_{b=1}^{\lfloor\frac{r}{T}\rfloor}(3b^2T+3b+1)$$
$$=\sum_{T=1}^{r}\varphi(T)(3T\sum_{b=1}^{\lfloor\frac{r}{T}\rfloor}b^2+3\sum_{b=1}^{\lfloor\frac{r}{T}\rfloor}b + \lfloor\frac{r}{T}\rfloor)$$
这部分 $O(r)$ 解决。
用太多int128会T。
#include <bits/stdc++.h>
namespace IO {
void read() {}
template <typename T, typename... T2>
inline void read(T &x, T2 &... oth) {
T f = ; x = ;
char ch = getchar();
while (!isdigit(ch)) { if (ch == '-') f = -; ch = getchar(); }
while (isdigit(ch)) { x = x * + ch - ; ch = getchar(); }
x *= f;
read(oth...);
}
}
#define read IO::read
#define print IO::print
#define ll long long
#define int128 __int128
const int MOD = ;
const int inv6 = , inv2 = ;
const int N = 1e7 + ;
int prime[N], phi[N], prin;
bool vis[N];
void init() {
phi[] = ;
for (int i = ; i < N; i++) {
if (!vis[i]) { prime[++prin] = i; phi[i] = i - ; }
for (int j = ; j <= prin && i * prime[j] < N; j++) {
vis[i * prime[j]] = ;
if (i % prime[j] == ) {
phi[i * prime[j]] = prime[j] * phi[i];
break;
}
phi[i * prime[j]] = phi[i] * phi[prime[j]];
}
}
}
int root3(int128 n) {
int l = , r = 1e7 + ;
int ans = ;
while (l <= r) {
int128 mid = (l + r) / ;
if (mid * mid * mid <= n) l = mid + , ans = mid;
else r = mid - ;
}
return ans;
}
template<class T>
T gcd(T a, T b) {
while (b) {
a %= b;
std::swap(a, b);
}
return a;
}
void M(int &a) {
if (a < ) a += MOD;
if (a >= MOD) a -= MOD;
}
int f(int128 n, int a) {
int ans = ;
for (int i = ; 1LL * i * i <= a; i++) {
if (a % i) continue;
int128 temp = n / i * phi[i] % MOD;
M(ans += temp);
if (a == i * i) continue;
int j = a / i;
temp = n / j * phi[j] % MOD;
M(ans += temp);
}
return ans;
}
int sum_squr(int n) {
int ans = 1LL * n * (n + ) % MOD * ( * n + ) % MOD * inv6 % MOD;
return ans;
}
int sum(int n) {
return 1LL * n * (n + ) / % MOD;
}
int main() {
init();
int T;
read(T);
while (T--) {
int128 n;
read(n);
if (n <= ) {
int ans = ;
for (int i = ; i <= n; i++)
ans += gcd(, i);
printf("%d\n", ans);
continue;
}
int r = root3(n);
int128 rr = (int128)r * r * r;
int ans = f(n, r) - f(rr - , r);
M(ans);
r--;
for (int i = ; i <= r; i++) {
int y = r / i;
int temp = 3LL * i * sum_squr(y) % MOD;
M(temp += 3LL * sum(y) % MOD);
M(temp += y);
temp = 1LL * temp * phi[i] % MOD;
M(ans += temp);
}
printf("%d\n", ans);
}
return ;
}
HDU 6588 Function的更多相关文章
- HDU 5608 function [杜教筛]
HDU 5608 function 题意:数论函数满足\(N^2-3N+2=\sum_{d|N} f(d)\),求前缀和 裸题-连卷上\(1\)都告诉你了 预处理\(S(n)\)的话反演一下用枚举倍数 ...
- HDU 5608 - function
HDU 5608 - function 套路题 图片来自: https://blog.csdn.net/V5ZSQ/article/details/52116285 杜教筛思想,根号递归下去. 先搞出 ...
- HDU 6038 - Function | 2017 Multi-University Training Contest 1
/* HDU 6038 - Function [ 置换,构图 ] 题意: 给出两组排列 a[], b[] 问 满足 f(i) = b[f(a[i])] 的 f 的数目 分析: 假设 a[] = {2, ...
- 洛谷P1464 Function HDU P1579 Function Run Fun
洛谷P1464 Function HDU P1579 Function Run Fun 题目描述 对于一个递归函数w(a,b,c) 如果a≤0 or b≤0 or c≤0就返回值11. 如果a> ...
- [2019HDU多校第一场][HDU 6588][K. Function]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6588 题目大意:求\(\sum_{i=1}^{n}gcd(\left \lfloor \sqrt[3] ...
- HDU 5875 Function 【倍增】 (2016 ACM/ICPC Asia Regional Dalian Online)
Function Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- 2017 Multi-University Training Contest - Team 1 1006&&HDU 6038 Function【DFS+数论】
Function Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- HDU 5875 Function 优先队列+离线
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5875 Function Time Limit: 7000/3500 MS (Java/Others) ...
- HDU 5875 Function(RMQ-ST+二分)
Function Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total ...
随机推荐
- Project Euler Problem 675
ORZ foreverlasting聚聚,QQ上问了他好久才会了这题(所以我们又聊了好久的Gal) 我们先来尝试推导一下\(S\)的性质,我们利用狄利克雷卷积来推: \[2^\omega=I\ast| ...
- 【shell脚本】通过位置变量创建Linux账户及密码===addUser.sh
通过位置变量创建Linux账户及密码 脚本内容 [root@VM_0_10_centos shellScript]# vi addUser.sh #!/bin/bash # 通过位置变量创建系统账户及 ...
- sitecore 如何创建一个渠道分类
您可以通过渠道跟踪联系人与您的品牌的所有互动.您可以将渠道与广告系列活动相关联,以便跟踪联系人与您的品牌互动的方式.通过比较各个渠道的目标转化率,您可以了解哪些渠道可以带来更好的联系参与度.您可以在体 ...
- 抓包工具 fidder4
抓包工具 fidder4 fidder4是一款基于windos灵活的抓包工具,可抓取pc端移动端的网络数据包. 安装 安装:fidder 4 下载:https://www.telerik.com/d ...
- Kubernetes Pod 调度约束
Kubernetes Pod 调度约束 可以将pod调度到指定的节点Node内 默认:根据节点资源利用率等分配Node节点. nodeName用于将Pod调度到指定的Node名称上 nodeSelec ...
- CentOS 8 换源,设置dnf / yum镜像
aliyun更新了centos8的说明 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos- ...
- ubuntu 换源 aliyun
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list sudo sed -i 's/securit ...
- sap和OA之间数值传递2(工程创建)
1.创建project. 右击--new-other
- Python - Socket网络编程 - 第二十六天
网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高 ...
- 高精度gcd
#include<iostream> #include<cstdio> #include<cstring> #define inf 1000000000 using ...