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

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 10000001
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int T,n,phi[N],mobius[N],prime[N],cnt;
ll f[N];
bool flag[N];
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4804.in","r",stdin);
freopen("bzoj4804.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
T=read();
flag[]=;mobius[]=;phi[]=;f[]=;
for (int i=;i<N;i++)
{
if (!flag[i]) prime[++cnt]=i,phi[i]=i-,mobius[i]=-,f[i]=i-;
for (int j=;j<=cnt&&prime[j]*i<N;j++)
{
flag[prime[j]*i]=;
if (i%prime[j]==)
{
phi[prime[j]*i]=phi[i]*prime[j];
if ((i/prime[j])%prime[j]) f[prime[j]*i]=f[i/prime[j]]*(1ll*prime[j]*prime[j]-*prime[j]+);
else f[prime[j]*i]=f[i]*prime[j];
break;
}
mobius[prime[j]*i]=-mobius[i];
phi[prime[j]*i]=phi[i]*(prime[j]-);
f[prime[j]*i]=f[i]*(prime[j]-);
}
}
for (int i=;i<N;i++) f[i]+=f[i-];
while (T--)
{
n=read();ll ans=;
for (int i=;i<=n;i++)
{
int t=n/(n/i);
ans+=(f[t]-f[i-])*(n/i)*(n/i);
i=t;
}
printf(LL,ans);
}
return ;
}

BZOJ4804 欧拉心算(莫比乌斯反演+欧拉函数+线性筛)的更多相关文章

  1. BZOJ 2694: Lcm 莫比乌斯反演 + 积性函数 + 线性筛 + 卡常

    求 $\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)\mu(gcd(i,j))^2$   $\Rightarrow \sum_{d=1}^{n}\mu(d)^2\sum_{i ...

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

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

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

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

  4. bzoj2693--莫比乌斯反演+积性函数线性筛

    推导: 设d=gcd(i,j) 利用莫比乌斯函数的性质 令sum(x,y)=(x*(x+1)/2)*(y*(y+1)/2) 令T=d*t 设f(T)= T可以分块.又由于μ是积性函数,积性函数的约束和 ...

  5. BZOJ4804: 欧拉心算(莫比乌斯反演 线性筛)

    题意 求$$\sum_1^n \sum_1^n \phi(gcd(i, j))$$ $T \leqslant 5000, N \leqslant 10^7$ Sol 延用BZOJ4407的做法 化到最 ...

  6. $BZOJ$2818 $gcd$ 莫比乌斯反演/欧拉函数

    正解:莫比乌斯反演/欧拉函数 解题报告: 传送门$QwQ$ 一步非常显然的变形,原式=$\sum_{d=1,d\in prim}^{n}\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd ...

  7. 【bzoj2401】陶陶的难题I “高精度”+欧拉函数+线性筛

    题目描述 求 输入 第一行包含一个正整数T,表示有T组测试数据.接下来T<=10^5行,每行给出一个正整数N,N<=10^6. 输出 包含T行,依次给出对应的答案. 样例输入 7 1 10 ...

  8. 中国剩余定理 & 欧拉函数 & 莫比乌斯反演 & 狄利克雷卷积 & 杜教筛

    ssplaysecond的博客(请使用VPN访问): 中国剩余定理: https://ssplaysecond.blogspot.jp/2017/04/blog-post_6.html 欧拉函数: h ...

  9. [luogu P2586] GCD 解题报告 (莫比乌斯反演|欧拉函数)

    题目链接:https://www.luogu.org/problemnew/show/P2568#sub 题目大意: 计算​$\sum_{x=1}^n\sum_{y=1}^n [gcd(x,y)==p ...

随机推荐

  1. Java:IDEA设置虚拟机运行时参数

    第一步:打开“Run->Edit Configurations”菜单 第二步:选择“VM Options”选项,输入你要设置的VM参数 第三步:点击“OK”.“Apply”后设置完成

  2. 14、Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

    Java并发编程:CountDownLatch.CyclicBarrier和Semaphore 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch ...

  3. springboot之RMI的使用

    1.RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方法调用的 ...

  4. explain获得使用的key的数据

    bool Explain_join::explain_key_and_len() { if (tab->ref.key_parts) return explain_key_and_len_ind ...

  5. 腾讯WeTest受邀参展2018谷歌开发者大会,Android 9专区免费开放

    2018谷歌开发者大会(Google Developer Days)于9月20日正式在上海拉开帷幕.在今年,围绕谷歌最新研发技术,来自机器学习.物联网.云服务等各领域精英参会并进行了案例分享. 201 ...

  6. MySQL日期函数、时间函数总结(MySQL 5.X)

    一.获得当前日期时间函数 1.1 获得当前日期+时间(date + time)函数:now() select now(); # :: 除了 now() 函数能获得当前的日期时间外,MySQL 中还有下 ...

  7. Git 与 GitHub

    Git 这个年代,不会点Git真不行啦,少年别问问什么,在公司你就知道了~ Git是一个协同开发的工具,主要作用是进行版本控制,而且还能自动检测代码是否发生变化. 一. 安装 下载地址:https:/ ...

  8. lesson 15 Fifty pence worth of trouble

    lesson 15 Fifty pence worth of trouble appreciate =be grateful for We really appreciate all the help ...

  9. Ubuntu14.04 panic --not syncing: Attempt to kill init 解决方法

    Ubuntu14.04 panic --not syncing: Attempt to kill init 解决方法 工作电脑装了一个虚拟机玩玩,胡乱下载了一些软件,apt-get了不少操作,后来重启 ...

  10. 【cookie接口】- jmeter - (请求提示no cookie)

    1.虽然 请求成功 响应码 200  ,但是  返回code 1  ,表示接口不成功 2.加入 空的cookie 管理器就可以了  返回 code 0 注意:状态码 200 只是表示请求是成功的 , ...