[51Nod 1244] - 莫比乌斯函数之和 & [51Nod 1239] - 欧拉函数之和 (杜教筛板题)
[51Nod 1244] - 莫比乌斯函数之和
求∑i=1Nμ(i)\sum_{i=1}^Nμ(i)∑i=1Nμ(i)
开推
∑d∣nμ(d)=[n==1]\sum_{d|n}\mu(d)=[n==1]d∣n∑μ(d)=[n==1]
移项
μ(d)=[n==1]−∑d∣n,d<nμ(d)∴S(N)=∑i=1Nμ(i)=∑i=1N([i==1]−∑d∣i,d<iμ(d))=1−∑i=1N∑d∣i,d<iμ(d)\mu(d)=[n==1]-\sum_{d|n,d<n}\mu(d)\newline
\therefore S(N)=\sum_{i=1}^Nμ(i)=\sum_{i=1}^N([i==1]-\sum_{d|i,d<i}\mu(d))\newline
=1-\sum_{i=1}^N\sum_{d|i,d<i}\mu(d) \newlineμ(d)=[n==1]−d∣n,d<n∑μ(d)∴S(N)=i=1∑Nμ(i)=i=1∑N([i==1]−d∣i,d<i∑μ(d))=1−i=1∑Nd∣i,d<i∑μ(d)
此处是杜教筛的精髓,也是整除分块优化的精髓(或者说是转换方法),枚举i是d的多少倍
S(N)=1−∑⌊id⌋=2N∑d=1,1<⌊id⌋⌊N⌊id⌋⌋μ(d)S(N)=1-\sum_{{\lfloor{\frac id}\rfloor} =2}^N\sum_{d=1,1<{\lfloor{\frac id}\rfloor}}^{\lfloor \frac N{\lfloor{\frac id}\rfloor} \rfloor}\mu(d)S(N)=1−⌊di⌋=2∑Nd=1,1<⌊di⌋∑⌊⌊di⌋N⌋μ(d)
令k=⌊id⌋k={\lfloor{\frac id}\rfloor}k=⌊di⌋,则有
S(N)=1−∑k=2N∑d=1⌊Nk⌋μ(d)=1−∑k=2NS(⌊Nk⌋)S(N)=1-\sum_{k=2}^N\sum_{d=1}^{\lfloor \frac Nk\rfloor}\mu(d)
=1-\sum_{k=2}^NS({\lfloor \frac Nk\rfloor})S(N)=1−k=2∑Nd=1∑⌊kN⌋μ(d)=1−k=2∑NS(⌊kN⌋)
那么就可以用线性筛出前面一部分,再整除分块优化递归处理
杜教筛无预处理的时间复杂度是Θ(n34)\Theta(n^{\frac 34})Θ(n43)
预处理一定范围内的答案后就能降到Θ(n23)\Theta(n^{\frac 23})Θ(n32)
然而我们此处并不需要多小的时间复杂度…随便处理一个10710^7107就能过了
AC code
#include <cstdio>
#include <map>
#include <cstring>
#include <algorithm>
using namespace std;
#define LL long long
const int MAXP = 1e7+1;
int Prime[MAXP/10], Cnt, mu[MAXP], sum[MAXP];
bool IsnotPrime[MAXP];
map<LL,int>S;
void init(int N)
{
mu[1] = 1;
for(int i = 2; i <= N; ++i)
{
if(!IsnotPrime[i]) Prime[++Cnt] = i, mu[i] = -1;
for(int j = 1; j <= Cnt && i * Prime[j] <= N; ++j)
{
IsnotPrime[i * Prime[j]] = 1;
if(i % Prime[j] == 0) { mu[i * Prime[j]] = 0; break; }
mu[i * Prime[j]] = -mu[i];
}
}
for(int i = 1; i <= N; i++) sum[i] = sum[i-1] + mu[i];
}
inline int solve(LL N)
{
if(N < MAXP) return sum[N];
if(S.count(N)) return S[N];//记忆化,其实此处可以Hash或者用
int ret = 1;
for(LL i = 2, j; i <= N; i=j+1)
{
j = N/(N/i);
ret -= (j-i+1) * solve(N/i);
}
return S[N] = ret;
}
int main ()
{
LL n, m; init(MAXP-1);
scanf("%lld%lld", &n, &m);
printf("%d\n", solve(m)-solve(n-1));
}
[51Nod 1239] - 欧拉函数之和
求 ∑i=1Nφ(i)\sum_{i=1}^Nφ(i)∑i=1Nφ(i)
开推,有
∑d∣nφ(d)=n
\sum_{d|n}φ(d)=n
d∣n∑φ(d)=n
移项
φ(n)=n−∑d∣n,d<nφ(d)∴S(N)=∑i=1N(i−∑d∣i,d<iφ(d))=N∗(N+1)2−∑i=1N∑d∣i,d<iφ(d)=N∗(N+1)2−∑⌊id⌋=2N∑d=1⌊N⌊id⌋⌋φ(d)
φ(n)=n-\sum_{d|n,d<n}φ(d)\newline
\therefore S(N)=\sum_{i=1}^N(i-\sum_{d|i,d<i}φ(d))\newline
=\frac{N*(N+1)}2-\sum_{i=1}^N\sum_{d|i,d<i}φ(d)\newline
=\frac{N*(N+1)}2-\sum_{{\lfloor\frac id\rfloor}=2}^N\sum_{d=1}^{{\lfloor\frac N{{\lfloor\frac id\rfloor}}\rfloor}}φ(d)\newlineφ(n)=n−d∣n,d<n∑φ(d)∴S(N)=i=1∑N(i−d∣i,d<i∑φ(d))=2N∗(N+1)−i=1∑Nd∣i,d<i∑φ(d)=2N∗(N+1)−⌊di⌋=2∑Nd=1∑⌊⌊di⌋N⌋φ(d)
令k=⌊id⌋k={\lfloor{\frac id}\rfloor}k=⌊di⌋,则有
S(N)=N∗(N+1)2−∑k=2N∑d=1⌊Nk⌋φ(d)=N∗(N+1)2−∑k=2NS(⌊Nk⌋)
S(N)=\frac{N*(N+1)}2-\sum_{k=2}^N\sum_{d=1}^{{\lfloor\frac Nk\rfloor}}φ(d)\newline
=\frac{N*(N+1)}2-\sum_{k=2}^NS({\lfloor\frac Nk\rfloor})\newline
S(N)=2N∗(N+1)−k=2∑Nd=1∑⌊kN⌋φ(d)=2N∗(N+1)−k=2∑NS(⌊kN⌋)
然后…就没有了.像上一道题一样处理就完了
AC Code
#include <cstdio>
#include <map>
#include <cstring>
#include <algorithm>
using namespace std;
#define LL long long
const int MAXP = 5e6 + 1;
const int mod = 1e9 + 7;
const int inv2 = 500000004;
int Prime[MAXP/10], Cnt, phi[MAXP];
LL sum_phi[MAXP];
bool IsnotPrime[MAXP];
void init(int N)
{
phi[1] = 1;
for(LL i = 2; i <= N; ++i)
{
if(!IsnotPrime[i]) Prime[++Cnt] = i, phi[i] = i-1;
for(LL j = 1; j <= Cnt && i * Prime[j] <= N; ++j)
{
IsnotPrime[i * Prime[j]] = 1;
if(i % Prime[j] == 0)
{
phi[i * Prime[j]] = phi[i] * Prime[j];
break;
}
phi[i * Prime[j]] = phi[i] * (Prime[j]-1);
}
}
for(int i = 1; i <= N; i++)
sum_phi[i] = ((sum_phi[i-1] + phi[i]) % mod + mod) % mod;
}
map<LL, LL> S_phi;
inline LL solve_phi(LL N)
{
if(N < MAXP) return sum_phi[N];
if(S_phi.count(N)) return S_phi[N];
LL ret = (N%mod + 1) * (N%mod) % mod * inv2 % mod;
for(LL i = 2, j; i <= N; i=j+1)
{
j = N/(N/i);
ret = (ret - (j-i+1) % mod * solve_phi(N/i) % mod) % mod;
}
return S_phi[N] = ((ret + mod) % mod);
}
int main ()
{
init(MAXP-1); LL n;
scanf("%lld", &n);
printf("%lld\n", solve_phi(n));
}
[51Nod 1244] - 莫比乌斯函数之和 & [51Nod 1239] - 欧拉函数之和 (杜教筛板题)的更多相关文章
- 51 NOD 1239 欧拉函数之和(杜教筛)
1239 欧拉函数之和 基准时间限制:3 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 关注 对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目.此函数以其首名研究 ...
- BZOJ_4802_欧拉函数_MR+pollard rho+欧拉函数
BZOJ_4802_欧拉函数_MR+pollard rho+欧拉函数 Description 已知N,求phi(N) Input 正整数N.N<=10^18 Output 输出phi(N) Sa ...
- 51nod 1239 欧拉函数之和(杜教筛)
[题目链接] https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 [题目大意] 计算欧拉函数的前缀和 [题解] 我们 ...
- 51nod 1237 最大公约数之和 V3【欧拉函数||莫比乌斯反演+杜教筛】
用mu写lcm那道卡常卡成狗(然而最后也没卡过去,于是写一下gcd冷静一下 首先推一下式子 \[ \sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j) \] \[ \sum_{i= ...
- 51Nod 1239 欧拉函数前n项和 杜教筛
http://www.51nod.com/Challenge/Problem.html#!#problemId=1239 AC代码 #include <bits/stdc++.h> #de ...
- 【51nod】1239 欧拉函数之和 杜教筛
[题意]给定n,求Σφ(i),n<=10^10. [算法]杜教筛 [题解] 定义$s(n)=\sum_{i=1}^{n}\varphi(i)$ 杜教筛$\sum_{i=1}^{n}(\varph ...
- 【51nod】1239 欧拉函数之和
题解 写完上一道就开始写这个,大体上就是代码改了改而已= = 好吧,再推一下式子! \(\sum_{i = 1}^{n}i = \sum_{i = 1}^{n}\sum_{d | i}\phi(d) ...
- 51nod 1239 欧拉函数之和【欧拉函数+杜教筛】
和bzoj 3944比较像,但是时间卡的更死 设\( f(n)=\sum_{d|n}\phi(d) g(n)=\sum_{i=1}^{n}f(i) s(n)=\sum_{i=1}^{n}\phi(i) ...
- 51nod 1238 最小公倍数之和 V3 【欧拉函数+杜教筛】
首先题目中给出的代码打错了,少了个等于号,应该是 G=0; for(i=1;i<=N;i++) for(j=1;j<=N;j++) { G = (G + lcm(i,j)) % 10000 ...
随机推荐
- 【转帖】2019年中国5G行业细分市场发展现状和市场前景分析 通信基站数量快速增长
2019年中国5G行业细分市场发展现状和市场前景分析 通信基站数量快速增长 中国有 600多万个基站 平均每200个人 一个基站.. 一个基站十万块钱的话 相当于 每个人 需要分摊 500块钱. ht ...
- 服务注册与发现—Eureka
一:Eureka简介 Eureka的意思是(因找到某物,尤指问题的答案而高兴) 我发现了,我找到了,作为一个服务注册和发现中心的名字确实很贴切啊. Eureka包含两个组件,Eureka Server ...
- Hibernate常用api以及增删改查
一 .API的定义 所谓的API全称就是(Application Programming Interface,应用程序编程接口).就是类库对外提供的接口.类.枚举.注解等元素. 如:JDK API ...
- vue 写一个瀑布流插件
效果如图所示: 采用了预先加载图片,再计算高度的办法..网络差的情况下,可能有点卡 新建 vue-water-easy.vue 组件文件 <template> <div class ...
- 音视频入门-07-认识YUV
* 音视频入门文章目录 * YUV & YCbCr 简介 YUV,是一种颜色编码方法.常使用在各个视频处理组件中. YUV 在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽. Y ...
- SQL Server2008导入导出数据库
一.导出数据库 1.新建一个.bak的文本 右击数据库-->Tasks-->BackUp-->Remove原来的数据库-->Add后选择之前建立的.bak档 二.导入数据库 1 ...
- 一行css代码搞定响应式布局
在这篇文章中,我将教你如何使用 CSS Grid 来创建一个超酷的图像网格图,它将根据屏幕的宽度来改变列的数量.最精彩的地方在于:所有的响应特性被添加到了一行 css 代码中.这意味着我们不必将 HT ...
- 【转载】网站配置Https证书系列(三):IIS网站设置Http链接直接跳转Https安全连接
Http链接请求是以明文的方式传输,在传输的过程中很容易被篡改数据,一个典型的例子就是运营商的网络劫持注入广告信息等,而Https请求则是安全加密的请求,报文数据以密文的形式进行传输.当IIS网站配置 ...
- MD 使用 i5ting_toc 转换成 HTML
MD 使用 i5ting_toc 转换成 HTML 本文作者:天析 作者邮箱:2200475850@qq.com 发布时间: Wed, 10 Jul 2019 13:59:00 +0800 前言 md ...
- Arduino Tian开发板:一个功能强大的天气预报中心
每天都在出现新的连接设备. Arduino携手云平台一起加入这场战斗,于是出现了一个新的挑战者 - Arduino Tian! 使用python和经典Arduino框架,本教程将引导您将您的Ardui ...