题面戳我

题意:求

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

多组数据,\(n\le10^7\)。

sol

SBT

单组数据\(O(\sqrt n)\)都是套路了,完整公式就不写了。

最后要线性筛出来的积性函数长成这样

\[h(T)=\sum_{d|T}\mu(\frac Td)\phi(d)
\]

这个要怎么筛?我这种小菜鸡就只会大力分类讨论

我都快数不清我分了几种了

1、\(h(1)=1\)

2、\(h(p)=\mu(p)\phi(1)+\mu(1)\phi(p)=p-2\)

3、\(h(p^2)=\mu(p^2)\phi(1)+\mu(p)\phi(p)+\mu(1)\phi(p^2)=p^2-2p+1\)

4、\(h(p^k)=h(p^{k-1})*p\quad(k>2)\)

剩下的就线性筛了。

code

#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
const int N = 1e7;
int gi()
{
int x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=0,ch=getchar();
while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return w?x:-x;
}
int pri[N+5],tot,zhi[N+5],low[N+5];
ll h[N+5];
void Mobius()
{
zhi[1]=h[1]=1;
for (int i=2;i<=N;i++)
{
if (!zhi[i]) low[i]=pri[++tot]=i,h[i]=i-2;
for (int j=1;j<=tot&&i*pri[j]<=N;j++)
{
zhi[i*pri[j]]=1;
if (i%pri[j]==0)
{
low[i*pri[j]]=low[i]*pri[j];
if (low[i]==i)
if (i==pri[j]) h[i*pri[j]]=h[i]*pri[j]+1;
else h[i*pri[j]]=h[i]*pri[j];
else
h[i*pri[j]]=h[i/low[i]]*h[low[i]*pri[j]];
break;
}
low[i*pri[j]]=pri[j];
h[i*pri[j]]=h[i]*h[pri[j]];
}
}
for (int i=2;i<=N;i++)
h[i]+=h[i-1];
}
int main()
{
Mobius();
int T=gi();
while (T--)
{
int n=gi(),i=1;
ll ans=0;
while (i<=n)
{
int j=n/(n/i);
ans+=(h[j]-h[i-1])*(n/i)*(n/i);
i=j+1;
}
printf("%lld\n",ans);
}
}

[BZOJ4804]欧拉心算的更多相关文章

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

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

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

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

  3. bzoj4804: 欧拉心算 欧拉筛

    题意:求\(\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)== ...

  4. 并不对劲的bzoj4804:欧拉心算

    题目大意 \(t\)(\(t\leq5000\))组询问,每次询问给出\(n\)(\(n\leq10^7\)),求: \[\sum_{i=1}^{n}\sum_{j=1}^{n}\phi(gcd(i, ...

  5. [BZOJ4804]欧拉心算:线性筛+莫比乌斯反演

    分析 关于这道题套路到不能再套路了没什么好说的,其实发这篇博客的目的只是为了贴一个线性筛的模板. 代码 #include <bits/stdc++.h> #define rin(i,a,b ...

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

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

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

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

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

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

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

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

随机推荐

  1. .35-浅析webpack源码之babel-loader入口文件路径读取

    在处理./input.js入口文件时,在类型判断被分为普通文件,所以走的文件事件流,最后拼接得到文件的绝对路径. 但是对应"babel-loader"这个字符串,在如下正则中被判定 ...

  2. WPF---Xaml中改变ViewModel的值

    在开发中遇到实现如下需求的情景:一个输入框,旁边一个清空输入的按钮,当输入框中有内容时显示清空按钮,点击该按钮可以清空输入框内容,当输入框中无内容时隐藏按钮 当然这个需求使用wpf的绑定功能很容易实现 ...

  3. iOS 8 UIAlertController 和 UIAlertAction

    将alertView 和 actionSheet 封装在UIAlertController 里面化整为零,使开发者更便利 当我们一味的追求高内聚,低耦合的时候,伟大的苹果反其道而行之,这也告诉了我们一 ...

  4. [记]WIndow/Linux 获取本机(全部)IPv4、IPv6、MAC地址方法 (C/C++)

    Linux 获取本机IP.MAC地址用法大全 //#include <sys/types.h> #include <ifaddrs.h> #include <sys/io ...

  5. Python 脚本实现对 Linux 服务器的监控

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 原文地址 由于原文来自微信公众号,并且脚本都是图片,所以这里 ...

  6. $.ajax的一些坑啊

    1.如果发送ajax返回的数据为json务必设置其 Content-Type:application/json;charset=UTF-8 不然会导致其success:function(data)中的 ...

  7. Centos/linux下的JDK安装

    1.连接到centos的远程主机上 #你的用户名 ssh root@xxxxx 2.输入密码登录 3.最好将镜像改为阿里云的镜像 http://mirrors.aliyun.com/help/cent ...

  8. 学习Yii框架,有哪些比较好的网站

    1.http://www.yiiframework.com/ 2.http://www.kancloud.cn/curder/yii/247741 3.http://www.manks.top/yii ...

  9. react+react-router+react-redux+nodejs+mongodb项目

    一个实际项目(OA系统)中的部分功能.这个demo中引入了数据库,数据库使用了mongodb.安装mongodb才能运行完整的功能.要看完整的项目可以移步我的github 技术栈 React v15. ...

  10. Docker系统五:Docker仓库

    创建Docker Hub账户 登录和上传镜像到Hub.docker.com docker login //登陆hub.docker.com docker tag ubutun1404-baseimag ...