http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1238

设\(A(n)=\sum\limits_{i=1}^n\frac{in}{(i,n)}\),则\(ans=\sum\limits_{i=1}^n\left(2A(i)-i\right)\)

\[\begin{aligned}
A(n)=&n\sum_{d|n}\sum_{i=1}^{\frac nd}i\left[\left(i,\frac nd\right)=1\right]\\
=&\frac n2\sum_{d|n}\left(\varphi(d)d+[d=1]\right)\\
=&\frac n2\sum_{d|n}\varphi(d)d+\frac n2\\
ans=&\sum_{i=1}^n\left(2A(i)-i\right)\\
=&\sum_{i=1}^ni\sum_{d|i}\varphi(d)d\\
=&\sum_{i=1}^ni\sum_{d=1}^{\left\lfloor\frac ni\right\rfloor}\varphi(d)d^2\\
\end{aligned}
\]

设\(S(n)=\sum\limits_{i=1}^n\varphi(i)i^2\),求出\(O\left(\sqrt n\right)\)不同下取整取值的\(S\)就可以算出答案了,所以现在重点是杜教筛\(S(n)\)。

先让\(f(n)=\varphi(n)n^2\)卷上\(f(n)=n^2\)

\[\sum_{i=1}^{n}\sum_{d|i}\varphi(d)d^2\left(\frac id\right)^2=\sum_{i=1}^ni^2\sum_{d|i}\varphi(d)=\sum_{i=1}^ni^3
\]

\[\begin{aligned}
\sum_{i=1}^ni^3=&\sum_{i=1}^{n}\sum_{d|i}\varphi(d)d^2\left(\frac id\right)^2\\
=&\sum_{i=1}^ni^2\sum_{d=1}^{\left\lfloor\frac ni\right\rfloor}\varphi(d)d^2\\
=&\sum_{i=1}^ni^2S\left(\left\lfloor\frac ni\right\rfloor\right)\\
\end{aligned}
\]

如果要求\(S(n)\),\(S(n)=\sum\limits_{i=1}^ni^3-\sum\limits_{i=2}^ni^2S\left(\left\lfloor\frac ni\right\rfloor\right)\),时间复杂度\(O\left(n^{\frac 23}\right)\)。

PS:\(\sum\limits_{i=1}^ni^3=\left(\frac{n(n+1)}{2}\right)^2\)

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll; const int N = 100003;
const int B = 4641589;
const int p = 1000000007;
const int ni2 = 500000004;
const int ni6 = 166666668; ll n;
bool notp[B + 1];
int phi[B + 1], sum[B + 1], num = 0, prime[B + 1]; void Euler_shai() {
sum[1] = phi[1] = 1;
for (int i = 2; i <= B; ++i) {
if (!notp[i]) prime[++num] = i, phi[i] = i - 1;
for (int j = 1; j <= num && prime[j] * i <= B; ++j) {
notp[prime[j] * i] = true;
if (i % prime[j] == 0) {
phi[prime[j] * i] = prime[j] * phi[i];
break;
} else
phi[prime[j] * i] = (prime[j] - 1) * phi[i];
}
sum[i] = (1ll * phi[i] * i % p * i % p + sum[i - 1]) % p;
}
} int ps[B];
ll ndx;
int S(ll x) {return (ndx = n / x) <= B ? sum[ndx] : ps[x];} void DJ_shai() {
for (ll i = n, y; i >= 1; i = n / (y + 1)) {
y = n / i;
if (y <= B) continue;
int &s = ps[i];
s = y % p * (y % p) % p * ((y + 1) % p) % p * ((y + 1) % p) % p * ni2 % p * ni2 % p;
for (ll j = 2, pre = 1, spre = 1, sj; j <= y; spre = sj, pre = j, ++j) {
j = y / (y / j);
sj = j % p * ((j + 1) % p) % p * ((j * 2 + 1) % p) % p * ni6 % p;
((s -= (sj - spre + p) % p * S(i * j) % p) += p) %= p;
}
}
} main() {
scanf("%lld", &n);
Euler_shai(); int ans = 0;
DJ_shai(); for (ll i = 1, pre = 0; i <= n; pre = i, ++i) {
i = n / (n / i);
(ans += (i + pre + 1) % p * ((i - pre) % p) % p * ni2 % p * S(i) % p) %= p;
} printf("%d\n", ans);
return 0;
}

【51Nod 1238】最小公倍数之和 V3的更多相关文章

  1. 51nod 1238 最小公倍数之和 V3

    51nod 1238 最小公倍数之和 V3 求 \[ \sum_{i=1}^N\sum_{j=1}^N lcm(i,j) \] \(N\leq 10^{10}\) 先按照套路推一波反演的式子: \[ ...

  2. 51NOD 1238 最小公倍数之和 V3 [杜教筛]

    1238 最小公倍数之和 V3 三种做法!!! 见学习笔记,这里只贴代码 #include <iostream> #include <cstdio> #include < ...

  3. 51nod 1238 最小公倍数之和 V3 【欧拉函数+杜教筛】

    首先题目中给出的代码打错了,少了个等于号,应该是 G=0; for(i=1;i<=N;i++) for(j=1;j<=N;j++) { G = (G + lcm(i,j)) % 10000 ...

  4. 51Nod 1238 最小公倍数之和V3

    题目传送门 分析: 现在我们需要求: \(~~~~\sum_{i=1}^{n}\sum_{j=1}^{n}lcm(i,j)\) \(=\sum_{i=1}^{n}\sum_{j=1}^{n}\frac ...

  5. 51Nod 1238 - 最小公倍数之和 V3(毒瘤数学+杜教筛)

    题目 戳这里 推导 ∑i=1n∑j=1nlcm(i,j)~~~\sum_{i=1}^{n}\sum_{j=1}^{n}lcm(i,j)   ∑i=1n​∑j=1n​lcm(i,j) =∑i=1n∑j= ...

  6. 【51nod】1238 最小公倍数之和 V3 杜教筛

    [题意]给定n,求Σi=1~nΣj=1~n lcm(i,j),n<=10^10. [算法]杜教筛 [题解]就因为写了这个非常规写法,我折腾了3天…… $$ans=\sum_{i=1}^{n}\s ...

  7. 51 NOD 1238 最小公倍数之和 V3

    原题链接 最近被51NOD的数论题各种刷……(NOI快到了我在干什么啊! 然后发现这题在网上找不到题解……那么既然A了就来骗一波访问量吧…… (然而并不怎么会用什么公式编辑器,写得丑也凑合着看吧…… ...

  8. 51 Nod 1238 最小公倍数之和 V3 杜教筛

    题目链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1238 题意:求$\sum_{i=1}^{n}\sum_{j=1}^{n}l ...

  9. [51Nod 1238] 最小公倍数之和 (恶心杜教筛)

    题目描述 求∑i=1N∑j=1Nlcm(i,j)\sum_{i=1}^N\sum_{j=1}^Nlcm(i,j)i=1∑N​j=1∑N​lcm(i,j) 2<=N<=10102<=N ...

  10. 【学术篇】51nod 1238 最小公倍数之和

    这是一道杜教筛的入(du)门(liu)题目... 题目大意 求 \[ \sum_{i=1}^n\sum_{j=1}^nlcm(i,j) \] 一看就是辣鸡反演一类的题目, 那就化式子呗.. \[ \s ...

随机推荐

  1. 【leetcode 简单】 第三十五题 环形链表

    给定一个链表,判断链表中是否有环. 进阶: 你能否不使用额外空间解决此题? /** * Definition for singly-linked list. * struct ListNode { * ...

  2. html 中的列表

    html 中列表可以分为 1.  无序列表(ul--li 的形式) 2.  有序列表(ol li的形式) 3.  定义列表(dl 的形式) 下面来看几种列表的具体内容: 1.无序列表. 无序列表的格式 ...

  3. VueJS ElementUI el-table 的 formatter 和 scope template 不能同时存在

    暂时可以通过 在 scope template 中自己处理格式化解决 相关issue: 2548

  4. python中随机数生成

    1.random.random random.random()用于生成一个0到1的随机符小数: 0 <= n < 1.0 2.random.uniform random.uniform的函 ...

  5. java 1.8 新特性 stream

    并发提升 java 中Stream类似于hadoop中的数据分析的思路,只不过hadoop大,用的是多台机算机的计算生态,而java  stream使用的单台计算机中的多cpu分析一块数据的过程.通过 ...

  6. 匿名函数、lambda表达式

    匿名函数 func = lambda x: y #x是形参,y是返回值 键字lambda表示匿名函数,冒号前面的x表示函数参数,冒号后面的y表示匿名函数的返回值. 例1:返回列表中长度大于等于3的元素 ...

  7. Ubuntu连接多台Ubuntu server的问题

    如果您用的是虚拟机上安装的几个Ubuntu server进行IP配置 要注意以下几点: <1>虚拟机上安装完成Ubuntu server 默认的网络连接方式是NAT ,应该改成桥接网卡 ( ...

  8. int(long) 类型转换为char

    char类型占一个字节,8位 int类型四个字节32位 (long类型的转换跟int类型相同) #include <stdio.h> ]) { buffer[] = (char)tmp; ...

  9. 9.Python3标准库--数据压缩与归档

    ''' 尽管现代计算机系统的存储能力日益增长,但生成数据的增长是永无休止的. 无损(lossless)压缩算法以压缩或解压缩数据花费的时间来换取存储数据所需要的空间,以弥补存储能力的不足. Pytho ...

  10. Denoise Autoencoder简单理解

    自编码器通过学习隐含特征来表达原始数据,那什么是denoise autoencoder呢? 关于Autoencoder参考:http://blog.csdn.net/on2way/article/de ...