链接:

https://loj.ac/problem/6229

题意:

$$F(n)=\sum_{i=1}n\sum_{j=1}i\frac{\mathrm{lcm}(i,j)}{\mathrm{gcd}(i,j)}$$

让你求 \(F(n) \bmod1000000007\)。

题解:

设\(\begin{align} f(n)=\sum_{i=1}^n\frac{lcm(i,n)}{gcd(i,n)}&=\sum_{i=1}^n\frac{n*i}{(i,n)^2}\\ &=\sum_{i=1}^n\sum_{d|n}[(i,n)=d]\frac{n*i}{d^2}\\ &=\sum_{d|n}\sum_{i=1}^{[\frac nd]}[(i,\frac nd)=1]\frac{n*i}d\\ &=\sum_{d|n}d\sum_{i=1}^d[(i,d)=1]*i\\ &=\frac 12(1+\sum_{d|n}d^2\varphi(d)) \end{align}\)。

即求 \(\sum_{i=1}^n\sum_{d|i}d^2\varphi(d)=\sum_{i=1}^n\sum_{d=1}^{[\frac ni]}d^2\varphi(d)\)。

令 \(\phi'(n)=\sum_{i=1}^ni^2\varphi(i)\)。

因为 \(\sum_{d|n}d^2\varphi(d)*(\frac nd)^2=n^2\sum_{d|n}\varphi(d)=n^3\)。

所以,

\(\begin{align} \sum_{i=1}^ni^3=[\frac{n(n+1)}{2}]^2&=\sum_{i=1}^n\sum_{d|i}d^2\varphi(d)*(\frac id)^2\\ &=\sum_{i=1}^ni^2\sum_{d=1}^{[ \frac ni]}d^2\varphi(d)\\ &=\sum_{i=1}^ni^2\phi'([\frac ni]) \end{align}\)。

所以得到:\(\phi'(n)=[\frac{n(n+1)}{2}]^2-\sum_{i=2}^ni^2\phi'([\frac ni])\)。

可以杜教筛先预处理前 \(n^{2/3}\),原问题可以在复杂度\(O(n^{2/3}log(n))\)内解决。

整合一下,就是:

推公式可以得到( 结合公式4 ):\(ans=\sum_{d=1}^n\sum_{i=1}^{\lfloor{n\over d}\rfloor}\sum_{j=1}^i ij[\gcd(i,j)=1]\)。

因为存在恒等式:\(\sum_{i=1}^ni[\gcd(i,n)=1]={[n=1]+n\varphi(n)\over 2}\)。

所以有:\(ans={n\over 2}+{1\over 2}\sum_{d=1}^n\sum_{i=1}^{\lfloor{n\over d}\rfloor}i^2\varphi(i)\)。

考虑 \(\sum_{i=1}^{n}i^2\varphi(i)\)出现的次数,可以得到: \(ans={n\over 2}+{1\over 2}\sum_{i=1}^ni^2\varphi(i)\lfloor{n\over i}\rfloor\)。

其中,\(\sum_{i=1}^ni^2 = \frac{n\cdot(n+1)\cdot(2n+1)}{6}\),\(\varphi(i)\)为欧拉函数。

代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int maxn = 1e6+100;
const int mod = 1e9+7;
int n;
int p[maxn],phi[maxn],pre[maxn]; int inv2,inv6;
ll qpower(ll a,ll b,ll mod)
{
ll res = 1;
while(b>0) {
if(b&1) res = res * a % mod;
b >>= 1;
a = a * a % mod;
}
return res;
}
void init(int n)
{
phi[1]=1;
for(int i=2;i<=n;i++)
{
if(p[i]==0) p[++*p]=i,phi[i]=i-1;
for(int j=1;j<=*p && 1LL*p[j]*i<=n;j++)
{
p[p[j]*i]=1;
if(i%p[j]) phi[i*p[j]]=phi[i]*phi[p[j]];
else
{
phi[i*p[j]]=phi[i]*p[j];
break;
}
}
}
for(int i=1;i<=n;i++) {
pre[i]=(pre[i-1]+1LL*phi[i]*i%mod*i)%mod;
}
}
map<ll,int> mp;
int calcinv2(ll l,ll r)
{
l %= mod;
r %= mod;
return (r - l + 1) * (l + r) % mod * inv2 % mod;
}
int calcinv6(ll n)
{
n %= mod;
return n * (n + 1) % mod * (2 * n + 1) % mod * inv6 % mod;
}
int calc2(ll l,ll r)
{
return (calcinv6(r) - calcinv6(l-1) ) % mod;
}
int calc3(ll n)
{
return 1LL * calcinv2(1 , n) * calcinv2(1 , n) % mod;
}
int S(ll n)
{
if(n <= 1e6) return pre[n];
if(mp.count(n)) return mp[n];
int res = calc3(n);
for(ll i = 2, j; i <= n ;i = j + 1) {
j = n / (n / i);
res = (res - 1LL * calc2(i,j) * S(n / i)) % mod;
}
return mp[n] = res;
}
int main(int argc, char const *argv[]) { ll n;
std::cin >> n;
init(1000000);// 2/3
inv2 = qpower(2,mod-2,mod);
inv6 = qpower(6,mod-2,mod);
int ans = 0;
int last = 0;
for(ll i = 1, j; i <= n; i = j + 1) {
j = n /( n / i );
int cur = S(j);
ans = (ans + 1LL * (cur - last) * ( n / i)) % mod;
last = cur;
}
ans = (ans + n) % mod * inv2 % mod;
std::cout << (ans + mod) % mod << '\n';
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
return 0;
}

LOJ 6229 LCM / GCD (杜教筛+Moebius)的更多相关文章

  1. 【51nod2026】Gcd and Lcm(杜教筛)

    题目传送门:51nod 我们可以先观察一下这个$f(x)=\sum_{d|x}\mu(d) \cdot d$. 首先它是个积性函数,并且$f(p^k)=1-p \ (k>0)$,这说明函数$f( ...

  2. P6070 [RC-02] GCD [杜教筛,莫比乌斯反演]

    没啥好说的,杜教筛板子题. \[\sum_{i=1}^{N} \sum_{j=1}^{N}\sum_{p=1}^{\lfloor \frac{N}{j} \rfloor}\sum_{q=1}^{\lf ...

  3. loj#6229. 这是一道简单的数学题 (??反演+杜教筛)

    题目链接 题意:给定\(n\le 10^9\),求:\(F(n)=\sum_{i=1}^n\sum_{j=1}^i\frac{\mathrm{lcm}(i,j)}{\mathrm{gcd}(i,j)} ...

  4. LOJ#6229. 这是一道简单的数学题(莫比乌斯反演+杜教筛)

    题目链接 \(Description\) 求\[\sum_{i=1}^n\sum_{j=1}^i\frac{lcm(i,j)}{gcd(i,j)}\] 答案对\(10^9+7\)取模. \(n< ...

  5. 【LOJ#572】Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛)

    [LOJ#572]Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛) 题面 LOJ \[ans=\sum_{i=1}^n\sum_{j=1}^n f(gcd(i,j))^k\ ...

  6. LOJ6686 Stupid GCD(数论,欧拉函数,杜教筛)

    做题重心转移到 LOJ 了. 至于为什么,如果你知道“……”的密码,就去看吧. LOJ 上用户自创题大多数都不可做,今天看到个可做题(而且还是个水题),就来做了一发. 明显枚举立方根.(以下令 $m= ...

  7. P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】

    除了最后一题都比较简单就写一起了 P4450-双亲数 题目链接:https://www.luogu.com.cn/problem/P4450 题目大意 给出\(A,B,d\)求有多少对\((a,b)\ ...

  8. LOJ# 572. 「LibreOJ Round #11」Misaka Network 与求和(min25筛,杜教筛,莫比乌斯反演)

    题意 求 \[ \sum_{i = 1}^{n} \sum_{i = 1}^{n} f(\gcd(i, j))^k \pmod {2^{32}} \] 其中 \(f(x)\) 为 \(x\) 的次大质 ...

  9. LOJ #6207 - 米缇(杜教筛+拉格朗日插值)

    LOJ 题面传送门 首先将 \(\sigma_k(ij)\) 展开: \[\sigma_k(ij)=\sum\limits_{x\mid i}\sum\limits_{y\mid j}[x\perp ...

随机推荐

  1. 洛谷P2633 Count on a tree

    题目描述 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始为0,即第一个 ...

  2. Python(五) 包、模块、函数与变量作用域

    一.while循环与使用场景 CONDITION=1 while CONDITION <=5 : CONDITION +=1 print("hello") else: pri ...

  3. tensorflow学习之路-----卷积神经网络个人总结

    卷积神经网络大总结(个人理解) 神经网络 1.概念:从功能他们模仿真实数据 2.结构:输入层.隐藏层.输出层.其中隐藏层要有的参数:权重.偏置.激励函数.过拟合 3.功能:能通过模仿,从而学到事件 其 ...

  4. whereis---定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。

    whereis命令用来定位指令的二进制程序.源代码文件和man手册页等相关文件的路径. whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件 ...

  5. Swift学习笔记(2)--元组(Tuples)、Optional(可选值)、(Assertions)断言

    1.Tuples(元组) 元组是多个值组合而成的复合值.元组中的值可以是任意类型,而且每一个元素的类型可以是不同的. 1>定义:使用()包含所有元素,用逗号分开,也可以对每个元素做命名 let ...

  6. EditPlus,UltraEdit等编辑器列选择的方法

    在使用富文本编辑器的时候,通常模式是行选择状态,由于今天想使用EditPlus列选择状态, 于是通过在网上收集的资料,总结出相关富文本编辑器的列选择的方法. EditPlus  1)菜单:编辑 -&g ...

  7. 洛谷 P1985 翻转棋

    P1985 翻转棋 题目描述 农夫约翰知道,聪明的奶牛可以产更多的牛奶.他为奶牛设计了一种智力游戏,名叫翻转棋. 翻转棋可以分成 M × N 个格子,每个格子有两种颜色,一面是黑的,一面是白的. 一旦 ...

  8. android反编译odex文件

    关于android的反编译工具,相信大家并不陌生 如APK-TOOL,dex2jar APK-TOOL 用于反编译出布局文件 下载地址http://code.google.com/p/android- ...

  9. Windows 操作系统与 .NET Framework

    Windos 2000 在单位的机房里好不easy才找到一台安装 Windows 2000 Server SP4 操作系统的server.这台硕果仅存的server到本月底也要退役了. Windows ...

  10. [Python] Handle Exceptions to prevent crashes in Python

    Exceptions cause your application to crash. Handling them allows you to recover gracefully and keep ...