【bzoj4804】欧拉心算 莫比乌斯反演+莫比乌斯函数性质+线性筛
Description
给出一个数字N
求\(\sum_{i=1}^{n}\sum_{j=1}^{n}\varphi(gcd(i,j))\)
Input
第一行为一个正整数T,表示数据组数。
接下来T行为询问,每行包含一个正整数N。
T<=5000,N<=10^7
Output
按读入顺序输出答案。
Sample Input
1
10
Sample Output
136
sol
这种题,八成和欧拉函数或者莫比乌斯函数有关......
那就推式子:
\(\sum_{i=1}^{n}\sum_{i=1}^{n}\varphi(gcd(i,j))\)
\(=\sum_{d=1}^{n}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}\varphi(d)\sum_{e|i,e|j}\mu(e)\)
\(=\sum_{d=1}^{n}\varphi(d)\sum_{e=1}^{\lfloor\frac{n}{d}\rfloor}\mu(e)\sum_{i=1}^{\lfloor\frac{n}{de}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{de}\rfloor}1\)
\(=\sum_{d=1}^{n}\varphi(d)\sum_{e=1}^{\lfloor\frac{n}{d}\rfloor}\mu(e)\lfloor\frac{n}{de}\rfloor^2\)
\(=\sum_{T=1}^{n}\lfloor\frac{n}{T}\rfloor^2\sum_{d|T}\varphi(\frac{T}{d})\mu(d)\)
前面的那个直接分块即可,后面的冷静分析一下:
“看到\(\mu\)就想到积性函数,就想到质因数分解,就想到消去$>$2的幂的贡献,OIer的思想唯有在这一层能如此跃进 ”
我们把T分解质因数之后,对于每个质数\(p_i\)的\(q_i\)次幂单独计算,最后再乘起来。
由于乘数里面有\(\mu\),所以大于2的幂次产生的贡献可以忽略,对于每个质数,后面这个式子就能够直接推出公式,具体地:
\(if\quad qi=0\quad f(p_i)=1\)
\(if\quad q_i=1\quad f(p_i)=p_i-2\)
\(if\quad q_i=2\quad f(p_i)=(p_i-1)^2\)
\(else\quad f(p_i)=pi^{qi-2}(p_i-1)^2\)
那么这个就可以线性筛了。
然后就没有了。
Code
#include <cstdio>
#define ll long long
int ls,n,T,vis[10000005],pri[10000005],tot;ll s[10000005];
void shai()
{
s[1]=1;for(int i=2;i<=1e7;i++)
{
if(!vis[i]) pri[++tot]=i,s[i]=i-2;
for(int j=1;j<=tot&&i*pri[j]<=1e7;j++)
{
vis[i*pri[j]]=1;
if(i%pri[j]==0)
{
if(i/pri[j]%pri[j]==0) s[i*pri[j]]=s[i]*pri[j];
else s[i*pri[j]]=s[i/pri[j]]*(pri[j]-1)*(pri[j]-1);
break;
}
s[i*pri[j]]=s[i]*(pri[j]-2);
}
}
for(int i=1;i<=1e7;i++) s[i]+=s[i-1];
}
ll cal(int n){ll ans=0;for(int i=1;i<=n;i=ls+1) ls=n/(n/i),ans+=(s[ls]-s[i-1])*(n/i)*(n/i);return ans;}
int main(){for(shai(),scanf("%d",&T);T--;printf("%lld\n",cal(n))) scanf("%d",&n);}
【bzoj4804】欧拉心算 莫比乌斯反演+莫比乌斯函数性质+线性筛的更多相关文章
- BZOJ4804 欧拉心算(莫比乌斯反演+欧拉函数+线性筛)
一通套路后得Σφ(d)μ(D/d)⌊n/D⌋2.显然整除分块,问题在于怎么快速计算φ和μ的狄利克雷卷积.积性函数的卷积还是积性函数,那么线性筛即可.因为μ(pc)=0 (c>=2),所以f(pc ...
- BZOJ4804: 欧拉心算(莫比乌斯反演 线性筛)
题意 求$$\sum_1^n \sum_1^n \phi(gcd(i, j))$$ $T \leqslant 5000, N \leqslant 10^7$ Sol 延用BZOJ4407的做法 化到最 ...
- [BZOJ4804]欧拉心算
题面戳我 题意:求 \[\sum_{i=1}^{n}\sum_{j=1}^{n}\phi(\gcd(i,j))\] 多组数据,\(n\le10^7\). sol SBT 单组数据\(O(\sqrt n ...
- 欧拉筛法模板&&P3383 【模板】线性筛素数
我们先来看欧拉筛法 •为什么叫欧拉筛呢?这可能是跟欧拉有关 •但是为什么叫线性筛呢?因为它的复杂度是线性的,也就是O(n),我们直接来看代码 #include<cstdio> #inc ...
- [BZOJ4804]欧拉心算:线性筛+莫比乌斯反演
分析 关于这道题套路到不能再套路了没什么好说的,其实发这篇博客的目的只是为了贴一个线性筛的模板. 代码 #include <bits/stdc++.h> #define rin(i,a,b ...
- 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)== ...
- 并不对劲的bzoj4804:欧拉心算
题目大意 \(t\)(\(t\leq5000\))组询问,每次询问给出\(n\)(\(n\leq10^7\)),求: \[\sum_{i=1}^{n}\sum_{j=1}^{n}\phi(gcd(i, ...
- 【BZOJ4804】欧拉心算 莫比乌斯反演+线性筛
[BZOJ4804]欧拉心算 Description 给出一个数字N Input 第一行为一个正整数T,表示数据组数. 接下来T行为询问,每行包含一个正整数N. T<=5000,N<=10 ...
- bzoj 4804 欧拉心算 欧拉函数,莫比乌斯
欧拉心算 Time Limit: 15 Sec Memory Limit: 256 MBSubmit: 408 Solved: 244[Submit][Status][Discuss] Descr ...
随机推荐
- 优化深度神经网络(三)Batch Normalization
Coursera吴恩达<优化深度神经网络>课程笔记(3)-- 超参数调试.Batch正则化和编程框架 1. Tuning Process 深度神经网络需要调试的超参数(Hyperparam ...
- python ftp 上传
#!/usr/bin/python # -*-coding:utf- -*- from ftplib import FTP def ftpconnect(host,username,password) ...
- 「小程序JAVA实战」小程序视图之细说数据绑定(13)
转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-13/ 在前面的小节里面其实对数据绑定都有所了解了,在这次给老铁在好好说下数据绑定,看下它的方方面面 ...
- 配置环境是程序员的第一步 -- Windows 10 下 MySQL 安装
MySQL 作为最典型的关系型数据库管理系统,由于其体积小.速度快.总体拥有成本低,尤其是其开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库.MySQL 社区版的功能也足够我们 ...
- Leetcode:Longest Substring Without Repeating Characters分析和实现
题目大意是传入一条字符串,计算出这样的这样一条子字符串,要求子字符串是原字符串的连续的某一段,且子字符串内不包含两个或两个以上的重复字符.求符合上面条件的字符串中最长的那一条的长度. 首先注意到任意一 ...
- win7 下安装mysql 整理
1.去官网下载mysql-5.6.13-winx64.zip包.地址: http://dev.mysql.com/downloads/mysql/5.6.html 2,把安装包解压到自己指定的目录,我 ...
- JSP页面使用EL表达式出现的问题:javax.el.PropertyNotFoundException: Property 'ID' not found on type java.lang.Str
问题描述: 1. 后台返回到JSP前台的的list,在jsp页面使用EL表达式遍历时出现如下问题:javax.el.PropertyNotFoundException: Property 'ID' n ...
- Spring框架找不到 applicationContext.xml文件,可能是由于applicationContext.xml文件的路径没有放在根目录下造成的
Spring框架找不到 applicationContext.xml文件,可能是由于applicationContext.xml文件的路径没有放在根目录下造成的
- 1-在eclipse里面配置python(最详细)
最近有时间打算学下python,打算学当然是得先搞好开发工具,网上搜一波,发现许多ide,居然可以在eclipse下写python,由于最近一直在搞java,所以已经装了eclipse,所以打算就在e ...
- 执行CUnit测试出错
est/test_fifo.test: error while loading shared libraries: libcunit.so.1: cannot open shared object f ...