题目描述

输入

第一行包含一个正整数T,表示有T组测试数据。接下来T<=10^5
行,每行给出一个正整数N,N<=10^6。

输出

包含T行,依次给出对应的答案。

样例输入

7
1
10
100
1000
10000
100000
1000000

样例输出

1
2127
18446224
183011304660
1827127167830060
18269345553999897648
182690854273058293758232


题解

“高精度”+欧拉函数+线性筛

由于$i$和$j$的范围都是$1$到$n$,因此可以先只计算$j\le i$的情况,然后乘2,再减去多算的$i=1$即为题目中$1$到$n$的情况。

$\ \ \ \ \sum\limits_{i=1}^n\sum\limits_{j=1}^ilcm(i,j)\\=\sum\limits_{i=1}^n\sum\limits_{d|i}\sum\limits_{j=1}^i[gcd(i,j)=d]\frac{ij}d\\=\sum\limits_{i=1}^n\sum\limits_{d|i}\sum\limits_{j=1}^{\frac id}[gcd(\frac id,j)=1]ij\\=\sum\limits_{i=1}^ni\sum\limits_{d|i}\sum\limits_{j=1}^{\frac id}[gcd(\frac id,j)=1]j\\=\sum\limits_{i=1}^ni\sum\limits_{d|i}\sum\limits_{j=1}^{d}[gcd(d,j)=1]j$

而考虑$\sum\limits_{j=1}^d[gcd(d,j)=1]j$的实际含义:$1\sim d$中所有与$d$互质的数的和。考虑当$d>1$时,如果$j$与$d$互质,那么$d-j$与$d$也一定互质。因此与$d$互质的数一定是成对出现的,每对的和为$d$,故它们的和为$\frac{d\varphi(d)}2$。注意这个公式在$d=1$时不成立,需要特判

于是就有:

$\ \ \ \ \sum\limits_{i=1}^ni\sum\limits_{d|i}\sum\limits_{j=1}^{d}[gcd(d,j)=1]j\\=\frac{\sum\limits_{i=1}^ni(\sum\limits_{d|i}d\varphi(d)+1)}2$

于是所求即为:

$2·\frac{\sum\limits_{i=1}^ni(\sum\limits_{d|i}d\varphi(d)+1)}2-\sum\limits_{i=1}^ni=\sum\limits_{i=1}^ni\sum\limits_{d|i}d\varphi(d)$

(其中很多乱七八糟的东西都消掉了,剩下的式子非常优美)

然后$f(i)=\sum\limits_{d|i}d\varphi(d)$是积性函数,因此可以快筛。

当然,此时$i$与$prime[j]$不互质时没有很好的通用方法,只好使用快筛的通法:设$n=vp^a$,那么$f(n)=f(v)*f(p^a)$,此时只需要维护每个数的$p$和$p^a$即可使用等比数列求和公式$O(1)$求出:

$f(p^a)=\frac{p^{2a+1}+1}{p+1}$

然后就可以维护$i·f(i)$的前缀和,然后$O(1)$回答询问。

然而本题最恶心之处:本题爆long long!因此必须使用中精度,即两个long long拼起来,每个long long12位。当然,只需要在求前缀和时使用中精度,其它地方long long即可。

时间复杂度$O(n+T)$

#include <cstdio>
#define N 1000010
#define k 1000000
typedef long long ll;
ll f[N] , sx[N] , sy[N];
int w[N] , v[N] , prime[N] , tot , np[N];
int main()
{
int i , j , t , T , n;
f[1] = 1;
for(i = 2 ; i <= k ; i ++ )
{
if(!np[i]) w[i] = v[i] = i , f[i] = (ll)i * i - i + 1 , prime[++tot] = i;
for(j = 1 ; j <= tot && (t = i * prime[j]) <= k ; j ++ )
{
np[t] = 1;
if(i % prime[j] == 0)
{
w[t] = w[i] , v[t] = v[i] * w[i] , f[t] = ((ll)v[t] * v[t] * w[t] + 1) / (w[t] + 1) * f[t / v[t]];
break;
}
else w[t] = v[t] = prime[j] , f[t] = f[i] * f[prime[j]];
}
}
for(i = 1 ; i <= k ; i ++ ) sx[i] = sx[i - 1] + i * f[i] , sy[i] = sy[i - 1] + sx[i] / 1000000000000ll , sx[i] %= 1000000000000ll;
scanf("%d" , &T);
while(T -- )
{
scanf("%d" , &n);
if(sy[n]) printf("%lld%012lld\n" , sy[n] , sx[n]);
else printf("%lld\n" , sx[n]);
}
return 0;
}

【bzoj2401】陶陶的难题I “高精度”+欧拉函数+线性筛的更多相关文章

  1. Bzoj 2818: Gcd 莫比乌斯,分块,欧拉函数,线性筛

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 3241  Solved: 1437[Submit][Status][Discuss ...

  2. 【bzoj2190】【仪仗队】欧拉函数+线性筛(浅尝ACM-J)

    向大(hei)佬(e)势力学(di)习(tou) Description 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪 ...

  3. 【BZOJ2401】陶陶的难题I 欧拉函数+线性筛

    [BZOJ2401]陶陶的难题I 题意:求,n<=1000000,T<=100000 题解:直接做是n*sqrt(n)的,显然会TLE,不过这题a和b都是循环到n,那么就可以进行如下的神奇 ...

  4. BZOJ4804 欧拉心算(莫比乌斯反演+欧拉函数+线性筛)

    一通套路后得Σφ(d)μ(D/d)⌊n/D⌋2.显然整除分块,问题在于怎么快速计算φ和μ的狄利克雷卷积.积性函数的卷积还是积性函数,那么线性筛即可.因为μ(pc)=0 (c>=2),所以f(pc ...

  5. HDU6434 Count【欧拉函数 线性筛】

    HDU6434 I. Count T次询问,每次询问\(\sum_{i=1}^{n}\sum_{j=1}^{n-1}[gcd(i-j,i+j)=1]\) \(T\le 1e5, n \le 2e7\) ...

  6. 欧拉函数(小于或等于n的数中与n互质的数的数目)&& 欧拉函数线性筛法

    [欧拉函数] 在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler’s totient function.φ函数.欧拉商数等. 例如φ( ...

  7. Bi-shoe and Phi-shoe(欧拉函数/素筛)题解

    Bi-shoe and Phi-shoe Bamboo Pole-vault is a massively popular sport in Xzhiland. And Master Phi-shoe ...

  8. lightoj1370欧拉函数/素数筛

    这题有两种解法,1是根据欧拉函数性质:素数的欧拉函数值=素数-1(可根据欧拉定义看出)欧拉函数定义:小于x且与x互质的数的个数 #include<map> #include<set& ...

  9. 欧拉函数线性求解以及莫比乌斯反演(Mobius)

    前言 咕咕了好久终于来学习莫反了 要不是不让在机房谁会发现数学一本通上有这么神奇的东西 就是没有性质的证明 然后花了两节数学课证明了一遍 舒服- 前置知识:欧拉函数,二项式定理(组合数) 会欧拉函数的 ...

随机推荐

  1. 史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)

    转载请标明出处: https://www.fangzhipeng.com/springcloud/2017/07/12/sc03-feign/ 本文出自方志朋的博客 最新Finchley版本请访问: ...

  2. 【Java】数组知识回顾

    package another; import java.util.Arrays; import java.util.List; /** * 数组知识回顾 * @author ChristineBas ...

  3. 理解 Gulp 和 Webpack(转)

    Gulp 和 webpack 之间的关系是十分暧昧的,却也经常被人误解,以为它俩是竞争关系,其实不然. Gulp 是一个任务管理工具,让简单的任务更清晰,让复杂的任务易于掌控:而 webpack 的理 ...

  4. Colours–颜色库,包含100种预定义的颜色和方法

    简介 Colours–颜色库,包含各种100种预定义的颜色和方法,可以简化颜色相关的开发工作. 项目主页: Colours 最新示例: 点击下载 快速入门 安装 通过Cocoapods安装 pod ' ...

  5. 关于 Angular引用Material出现node_modules/@angular/material/button-toggle/typings/button-toggle.d.ts(154,104): error TS2315: Type 'ElementRef' is not generic.问题

    百度了好久 ,,,最后谷歌出来了.. 该错误可能来自于您将@ angular / material设置为6.0.0, 但所有其他Angular包都是5.x.您应该始终确保Material主要版本与An ...

  6. 第一次认识lambda匿名函数

    lambda 为了解决一些简单的需求而设计的"一句话"函数 语法 lambda 参数:返回值 1.可以多个参数,参数间用逗号隔开 2.匿名函数不管多复杂,只能写一行 3.返回值和正 ...

  7. C++高级 STL——模板函数、模板类

    1.模板函数 // 定义 template <class T> Max(T &t1, T &t2) { return ((t1 > t2) ? t1 : t2); } ...

  8. 26-dotnet watch run 和attach到进程调试

    1-打开vscode, 按下Ctrl+`,打开命令行窗口 创建一个donet core mvc项目 2-打开刚刚创建的文件夹 3-输入 dotnet run 访问网站 4 -F5键即可调试 5-更改代 ...

  9. Nginx安装,目录结构与配置文件详解

    1.Nginx简介 Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设 ...

  10. aspx页面 按钮不响应回车键

    aspx页面在IE浏览器中,页面上的按钮默认都响应回车键,但有的时候我们的文本框可能需要响应回车键,这时我们就不想让按钮再响应回车键,这时我们只需要设置按钮的属性即可. 按钮分为两种,一种是<b ...