数论题不多BB,直接开始推导吧:

\(\sum_{i=1}^n \sum_{j=1}^n \phi(gcd(i,j))\)

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

\(=\sum_{d=1}^n \phi(d)\cdot(\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor} \sum_{j=1}^{\lfloor\frac{n}{d}\rfloor} [gcd(i,j)=1])\)

然后\(\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor} \sum_{j=1}^{\lfloor\frac{n}{d}\rfloor} [gcd(i,j)=1]=2\cdot\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor} \phi(i) -1\),这个也是一个比较常用的结论了吧。具体可以看Luogu P2568 GCD的推导,之后为了方便,我们记\(sum_x=\sum_{i=1}^x \phi(i)\)

则上式\(=\sum_{d=1}^n(\phi(d)\cdot (2\cdot sum_{\lfloor\frac{n}{d}\rfloor}-1))\)

\(=2\cdot \sum_{d=1}^n(\phi(d)\cdot sum_{\lfloor\frac{n}{d}\rfloor})-sum_n\)

接下来就好做了,我们先把欧拉函数求前缀和,然后对于询问除法分块处理不同的\(sum_{\lfloor\frac{n}{d}\rfloor}\)即可。

复杂度\(O(n+T\sqrt n)\),轻松跑过

CODE

#include<cstdio>
#define RI register int
using namespace std;
const int P=1e7;
int prime[P+5],phi[P+5],cnt,n,t; long long ans,sum[P+5]; bool vis[P+5];
inline void resolve(void)
{
vis[1]=sum[1]=phi[1]=1; for (RI i=2;i<=P;++i)
{
if (!vis[i]) prime[++cnt]=i,phi[i]=i-1;
for (RI j=1;j<=cnt&&i*prime[j]<=P;++j)
{
vis[i*prime[j]]=1; if (i%prime[j]) phi[i*prime[j]]=phi[i]*(prime[j]-1);
else { phi[i*prime[j]]=phi[i]*prime[j]; break; }
}
sum[i]=sum[i-1]+phi[i];
}
}
int main()
{
for (scanf("%d",&t),resolve();t;--t)
{
scanf("%d",&n); ans=0; RI i,l,r;
for (l=1;l<=n;l=r+1) r=n/(n/l),ans+=sum[n/l]*(sum[r]-sum[l-1]);
printf("%lld\n",(ans<<1)-sum[n]);
}
return 0;
}

BZOJ 4804: 欧拉心算的更多相关文章

  1. bzoj 4804 欧拉心算 欧拉函数,莫比乌斯

    欧拉心算 Time Limit: 15 Sec  Memory Limit: 256 MBSubmit: 408  Solved: 244[Submit][Status][Discuss] Descr ...

  2. BZOJ 4804: 欧拉心算 欧拉函数

    Description 给出一个数字N Input 第一行为一个正整数T,表示数据组数. 接下来T行为询问,每行包含一个正整数N. T<=5000,N<=10^7 题解: 求 $\sum_ ...

  3. BZOJ_4804_欧拉心算_欧拉函数

    BZOJ_4804_欧拉心算_欧拉函数 Description 给出一个数字N Input 第一行为一个正整数T,表示数据组数. 接下来T行为询问,每行包含一个正整数N. T<=5000,N&l ...

  4. 【bzoj4804】欧拉心算 解题报告

    [bzoj4804]欧拉心算 Description 给出一个数字\(N\),计算 \[\sum_{i=1}^n\sum_{j=1}^n \varphi(\gcd(i,j))\] Input 第一行为 ...

  5. 【BZOJ4804】欧拉心算 莫比乌斯反演+线性筛

    [BZOJ4804]欧拉心算 Description 给出一个数字N Input 第一行为一个正整数T,表示数据组数. 接下来T行为询问,每行包含一个正整数N. T<=5000,N<=10 ...

  6. [BZOJ]4805: 欧拉函数求和

    解题思路类似莫比乌斯函数之和 题目大意:求[1,n]内的欧拉函数$\varphi$之和.($n<=2*10^{9}$) 思路:令$ M(n)=\sum_{i=1}^{n}\varphi (i)  ...

  7. BZOJ 4802 欧拉函数

    4802: 欧拉函数 Description 已知N,求phi(N) Input 正整数N.N<=10^18 Output 输出phi(N) Sample Input 8 Sample Outp ...

  8. BZOJ 4802 欧拉函数(Pollard_Rho)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4802 [题目大意] 已知N,求phi(N),N<=10^18 [题解] 我们用P ...

  9. 【bzoj4804】欧拉心算 莫比乌斯反演+莫比乌斯函数性质+线性筛

    Description 给出一个数字N 求\(\sum_{i=1}^{n}\sum_{j=1}^{n}\varphi(gcd(i,j))\) Input 第一行为一个正整数T,表示数据组数. 接下来T ...

随机推荐

  1. (后端)java回调机制

    转自强哥: 所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数.例如Win32下的窗口过程函数就是一个典型的回调函数. ...

  2. Django的认证系统—auth模块

    Django的认证系统 auth模块的知识点总结: 1. 创建超级用户 python manage.py createsuperuser from django.contrib import auth ...

  3. LeetCode题解之Binary Tree Pruning

    1.题目描述 2.问题分析 使用递归 3.代码 TreeNode* pruneTree(TreeNode* root) { if (root == NULL) return NULL; prun(ro ...

  4. Postgre SQL连接服务器失败

    首先这是登陆postgre sql时提示的错误信息: psql: 无法联接到服务器: Connection refused (0x0000274D/10061)        服务器是否在主机 &qu ...

  5. Asp.net MVC通过自定义特性实现Action日志记录

    一.自定义特性 /// <summary> /// 描述特性 /// </summary> [AttributeUsage(AttributeTargets.Method)] ...

  6. Qt实现同步(阻塞式)http get等网络访问操作

    Qt的网络操作类是异步(非阻塞的),但有时想做一些阻塞的事情就不方便了,可用如下几行代码轻松实现: QByteArray MyNetworkAccess::get(const QString & ...

  7. Linux远程访问及控制(SSH)

    1.ssh协议:用于远程登录,端口号:22/tcp 配置文件: 1)服务器端口:/etc/ssh/sshd_config 2)客户端 :/etc/ssh/ssh_config 2.服务器监听选项: U ...

  8. selenium 初探

    # -*- coding:utf-8 -*- from selenium import webdriver driver = webdriver.Firefox() # 打开firefox浏览器 dr ...

  9. django生命周期和事件委派

    这是事件委派如果不用事件委派   直接绑定的话,新添加的按钮不会有删除或者编辑的功能 上面是事件委派的代码 新添加的编辑按钮可以弹出123 django生命周期: 这是Django的生命周期 首先会通 ...

  10. linuxserver本地和百度云备份脚本小试

    本地单文件上传脚本.命名uf 这是在本机上做的測试,利用bpcs_uploader脚本实现,仅仅是进行简单的封装.自己主动完好云端文件路径. 技术要点:使用dirname获取文件所在文件夹.使用pwd ...