洛谷P4213 杜教筛模板

DeepSeek安装教程 两分钟讲述deepseek正确安装教程 阅读详情

[模板]杜教筛:

计算
∑i=1nμ(i)∑i=1nϕ(i) \sum_{i=1}^{n}\mu(i)\\\sum_{i=1}^{n}\phi(i) i=1∑n​μ(i)i=1∑n​ϕ(i)

Solution:

杜教筛是一种能在O(n23)O(n^{\frac{2}{3}})O(n32​)时间复杂度下计算积性函数的前缀和的算法,假设我们需要求积性函数f(x)f(x)f(x)的前nnn项和
S(n)=∑i=1nf(i) S(n)=\sum_{i=1}^{n}f(i) S(n)=i=1∑n​f(i)
我们不妨找多一个积性函数g(x)g(x)g(x),考虑他们的迪利克雷卷积的前nnn项和
∑i=1n(f∗g)(i)=∑i=1n∑d∣if(d)g(id) \sum_{i=1}^{n}(f*g)(i)=\sum_{i=1}^{n}\sum_{d|i}f(d)g(\frac{i}{d}) i=1∑n​(f∗g)(i)=i=1∑n​d∣i∑​f(d)g(di​)
优先枚举因子
∑d=1nf(d)∑i=1⌊nd⌋g(i)=∑d=1ng(d)∑i=1⌊nd⌋f(i) \sum_{d=1}^{n}f(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}g(i)=\sum_{d=1}^{n}g(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}f(i) d=1∑n​f(d)i=1∑⌊dn​⌋​g(i)=d=1∑n​g(d)i=1∑⌊dn​⌋​f(i)
上式两种形式等价,但右式的第二个求和部分恰好是S(⌊nd⌋)S(\lfloor\frac{n}{d}\rfloor)S(⌊dn​⌋),于是右式有
∑i=1n(f∗g)(i)=∑d=1ng(d)S(⌊nd⌋) \sum_{i=1}^{n}(f*g)(i)=\sum_{d=1}^{n}g(d)S(\lfloor\frac{n}{d}\rfloor) i=1∑n​(f∗g)(i)=d=1∑n​g(d)S(⌊dn​⌋)
将右式d=1d=1d=1部分单独考虑,即
∑i=1n(f∗g)(i)=g(1)S(n)+∑d=2ng(d)S(⌊nd⌋) \sum_{i=1}^{n}(f*g)(i)=g(1)S(n)+\sum_{d=2}^{n}g(d)S(\lfloor\frac{n}{d}\rfloor) i=1∑n​(f∗g)(i)=g(1)S(n)+d=2∑n​g(d)S(⌊dn​⌋)
可见,要求S(n)S(n)S(n),即求g(1)S(n)g(1)S(n)g(1)S(n),而右式的求和部分是可以递归处理的,至此只需要找出这个g(x)g(x)g(x)即可,有以下这些简单的数论积性函数可供选择,这些函数比较简单,并且迪利克雷卷积有显著的特性
ϵ(n)=[n=1]I(n)=1id(n)=n \epsilon(n)=[n=1]\\ I(n)=1\\ id(n)=n ϵ(n)=[n=1]I(n)=1id(n)=n
我们对μ\muμ卷积上III,得到
(μ∗I)(x)=∑d∣xμ(d)I(xd)=∑d∣xμ(d)=[x=1] (\mu * I)(x)=\sum_{d|x}\mu(d)I(\frac{x}{d})=\sum_{d|x}\mu(d)=[x=1] (μ∗I)(x)=d∣x∑​μ(d)I(dx​)=d∣x∑​μ(d)=[x=1]
上式的最后一个等号是莫比乌斯反演得到的,此式即μ∗I=ϵ\mu *I=\epsilonμ∗I=ϵ

对ϕ\phiϕ卷积上III,得到
(ϕ∗I)(x)=∑d∣xϕ(d)I(xd)=∑d∣xϕ(d)=x (\phi * I)(x)=\sum_{d|x}\phi(d)I(\frac{x}{d})=\sum_{d|x}\phi(d)=x (ϕ∗I)(x)=d∣x∑​ϕ(d)I(dx​)=d∣x∑​ϕ(d)=x
最后一个等号是欧拉函数的一个性质
n=∑d∣nϕ(d) n=\sum_{d|n}\phi(d) n=d∣n∑​ϕ(d)

证明:

由欧拉函数的定义
ϕ(n)=∑i=1n[gcd(i,n)=1] \phi(n)=\sum_{i=1}^{n}[gcd(i,n)=1] ϕ(n)=i=1∑n​[gcd(i,n)=1]
莫比乌斯反演得到
ϕ(n)=∑i=1n∑d∣gcd(i,n)μ(d) \phi(n)=\sum_{i=1}^{n}\sum_{d|gcd(i,n)}\mu(d) ϕ(n)=i=1∑n​d∣gcd(i,n)∑​μ(d)
优先枚举因子ddd
ϕ(n)=∑d∣nμ(d)⌊nd⌋ \phi(n)=\sum_{d|n}\mu(d) \lfloor \frac{n}{d} \rfloor ϕ(n)=d∣n∑​μ(d)⌊dn​⌋
设g(x)=xg(x)=xg(x)=x,莫比乌斯反演的变换形式有
ϕ(n)=∑d∣nμ(d)g(⌊nd⌋)⇒g(n)=n=∑d∣xϕ(d) \phi(n)=\sum_{d|n}\mu(d) g(\lfloor \frac{n}{d} \rfloor) \Rightarrow g(n)=n=\sum_{d|x}\phi(d) ϕ(n)=d∣n∑​μ(d)g(⌊dn​⌋)⇒g(n)=n=d∣x∑​ϕ(d)

于是只要选取g(x)=I(x)g(x)=I(x)g(x)=I(x)就可以解决原题的问题了。至此,可以在O(n34)O(n^{\frac{3}{4}})O(n43​)内解决上述问题,但还可以优化

  • 对于S(i)S(i)S(i),我们可以记忆化他,这样常数减小

  • 假设我们线性筛先求出n∈[1,m]n\in[1,m]n∈[1,m]的前缀和,这样的时间复杂度是O(m+nm)O(m+\frac{n}{\sqrt{m}})O(m+m​n​)的,我们设m=nkm=n^km=nk,我们尽量让两部分的时间复杂度相等,这样总复杂度取得最小,即

m=nm⇒m=n23 m=\frac{n}{\sqrt{m}}\Rightarrow m=n^{\frac{2}{3}} m=m​n​⇒m=n32​

此时总复杂度是O(n23)O(n^{\frac{2}{3}})O(n32​)

(复杂度的证明我也不太会,尚且知道O(n34)O(n^{\frac{3}{4}})O(n43​)与O(nm)O(\frac{n}{\sqrt{m}})O(m​n​)两个关键复杂度)

// #include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<bitset>
#include<map>
using namespace std;

using ll=long long;
const int N=1700005,inf=0x3fffffff;
const long long INF=0x3fffffffffffffff,mod=20101009;

ll n,mu[N],prime[N],phi[N],cnt;
bool nt[N];

map<ll,ll>map1,map2;

void make_prime()
{
    mu[1]=phi[1]=1;
    for(int i=2;i<N;i++)
    {
        if(!nt[i]) prime[++cnt]=i,phi[i]=i-1,mu[i]=-1;
        for(int j=1;j<=cnt&&i*prime[j]<N;j++)
        {
            nt[i*prime[j]]=true;
            if(i%prime[j]==0)
            {
                mu[i*prime[j]]=0;
                phi[i*prime[j]]=prime[j]*phi[i];
                break;
            }
            else
            {
                mu[i*prime[j]]=mu[i]*mu[prime[j]];
                phi[i*prime[j]]=phi[i]*phi[prime[j]];
            }
        }
    }
    for(int i=1;i<N;i++)
    {
        mu[i]+=mu[i-1];
        phi[i]+=phi[i-1];
    }
}

ll calcphi(ll n)
{
    if(n<N) return phi[n];
    if(map1.count(n)) return map1[n];
    ll ret=1ll*n*(n+1)/2;
    for(ll l=2,r;l<=n;l=r+1)
    {   
        r=n/(n/l);
        ret-=1ll*(r-l+1)*calcphi(n/l);
    }
    return map1[n]=ret;
}

ll calcmu(ll n)
{
    if(n<N) return mu[n];
    if(map2.count(n)) return map2[n];
    ll ret=1;
    for(ll l=2,r;l<=n;l=r+1)
    {
        r=n/(n/l);
        ret-=1ll*(r-l+1)*calcmu(n/l);
    }
    return map2[n]=ret;
}

int main()
{
    make_prime();
    int t; cin>>t;
    while(t--)
    {
        cin>>n;
        printf("%lld %lld\n",calcphi(n),calcmu(n));
    }
    return 0;
}
NVIDIA - 人形机器人扼要 人形机器人是仿照人类外形设计的通用双足机器人,旨在与人类并肩工作,提高生产效率。它们能够学习和执行各种任务,如抓取物体、移动集装箱、装卸箱子等。 阅读详情

相关推荐

手把手教你用Python 3.11和Node.js 18在Windows 11上搭建Dify开发环境

本文提供了一份详尽的Windows 11本地Dify开发环境搭建指南。文章手把手教你完成从Python 3.11、Node.js 18的安装配置,到PostgreSQL、Redis数据库服务的部署,再到前后端服务的启动与联调的全过程,并包含常见问题排查与效能优化建议,旨在帮助开发者构建一个稳定、可调试的Dify本地开发环境。

fire9的博客 645

杜教筛【莫比乌斯前缀和,欧拉函数前缀和】推导与模板【一千五百字】

杜教筛的时间复杂度还要取决于预处理数组的大小,将预处理前缀和数组处理到n^(2/3)大小会使杜教筛时间复杂度缩短至O(n^(2/3)),否则会超时。

jisuanji2606414的博客 693

SVPWM分析、各个扇区详细计算以及Matlab仿真

SVPWM分析以及各个扇区详细计算以及Matlab仿真说明目的两电平逆变器拓扑空间矢量扇区判断扇区内如何发波?矢量作用时间计算矢量切换时间的计算Simulink仿真/基于Matlab-R2014a版本 说明 第一次发文章,不太会用Markdown,word编辑的公式复制过来有些是乱码,因此都贴图了。 另外,本文公式和图片比较多,编辑工作量比较大,比较辛苦,转载的话,请注明出处,谢谢。 目的 由于在...

michaelf的博客 12万+

杜教筛(概念及模板)

功能 杜教筛可以在非线性的时间内求出极性函数的前缀和。 洛谷给出的模板: 对于n(n<231n<2^{31}n<231)求出: ans1=∑i=1nφans_1=\sum^{n}_{i=1}\varphians1​=∑i=1n​φ ...

平凡人Kalzn的博客 698

AutoDL上传数据详细步骤(自己用的步骤,可能没有其他大佬用的那么高级)

AutoDL上传数据详细步骤(自己用的步骤,可能没有其他大佬用的那么高级)

孟孟单单的博客 7万+

全双工AI语音交互:从原理到实践,构建实时对话系统

语音交互技术正从传统的半双工模式向全双工模式演进,以实现更自然、实时的对话体验。全双工交互的核心原理在于模拟人类电话通话,允许双方同时发送和接收音频流,这需要流式语音识别(Streaming ASR)和实时自然语言理解(Real-time NLU)技术的深度整合。其技术价值在于显著降低交互延迟,支持智能打断(Barge-in),从而提升人机对话的流畅度和自然度。在应用场景上,全双工技术是智能助手、实时翻译、车载语音及无障碍交互等领域的关键突破。本文以微软MAI Realtime等模型为例,探讨如何利用开源技

weixin_33693070的博客 404

【杜教筛模板】洛谷P4213

P4213 Attention 本题极度卡常,不需要long long的情况下尽量使用int,mu函数不需要使用long long。

KIKO_caoyue的博客 475

开源大模型“去审查化”技术解析:从LLaMA架构到本地部署与伦理边界

大型语言模型(LLM)基于Transformer架构,通过海量数据训练获得理解和生成自然语言的能力。其核心原理在于自注意力机制对上下文关系的建模。为了确保输出内容的安全与合规,主流模型普遍采用基于人类反馈的强化学习(RLHF)等技术进行安全对齐。这一过程旨在使模型行为符合人类价值观,是AI伦理工程实践的关键环节。然而,在特定研究场景下,如对抗性测试或内容安全算法研究,技术人员需要模拟极端对话以评估系统鲁棒性,这催生了针对“去对齐”或“移除护栏”的技术探索。此类技术通常通过对预训练模型进行反向微调或继续训练来

weixin_33743880的博客 588

P4213 【模板】杜教筛、P3768 简单的数学题、P3803 【模板】多项式乘法(FFT)

FFT 是一种用于快速计算离散傅里叶变换(Discrete Fourier Transform,DFT)的算法。数组时,使用了埃氏筛法的思想,同时计算出每个数的欧拉函数值。函数用于最终的计算,通过迭代和调用前面定义的函数来得到结果。进行初始化,将它们都设为 1。的 DFT,从而大大降低计算复杂度。函数用于计算特定形式的和。否则通过分块计算的方法来求解。函数用于快速计算幂取模运算。函数计算并输出相应的结果。函数用于计算平方和并取模。函数用于计算立方和并取模。用于定义一些计算的上限。

u014114223的博客 1246

大模型LoRA微调调参的实战技巧(持续更新)

本文主要介绍了大模型LoRA微调调参的实战技巧,希望对学习大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 实战技巧

herosunly的博客 20万+

基于FreeRedis实现的.NET Redis客户端缓存缓存键条件优雅过滤

在.NET开发中,使用Redis作为缓存解决方案是很常见的。FreeRedis是一个功能强大的Redis客户端库,它提供了丰富的功能和灵活性,使我们能够轻松地与Redis进行交互。在本文中,我们将探讨如何使用FreeRedis实现缓存键条件的优雅过滤,以提高缓存的效率和准确性。

RzuScala的博客 328

杜教筛模板 / p4213

杜教筛是一个用来快速求积性函数前缀和的方法

m0_54646258的博客 241

Fast-Lio2代码及论文解析2

点云数据频率较低而IMU为高频数据。

努力努力努力 2278

洛谷 P4213 【模板】杜教筛(Sum)(杜教筛)

输入输出样例 输入样例#1: 6 1 2 8 13 30 2333 输出样例#1: 1 1 2 0 22 -2 58 -3 278 -3 1655470 2 大佬博客:https://www.cnblogs.com/peng-ym/p/9446555.html(证明 、推导全都有,一些常用的函数要记住。简直好文。) 写一下需要记的公式吧: 设,g为自己要找的数论函数,f...

birdmanqin的博客 320

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

洛谷P4213 【模板】杜教筛(Sum)(杜教筛,莫比乌斯反演)

传送门 坑着,联赛活着回来再填(死了就不填了) 1 // luogu-judger-enable-o2 2 //minamoto 3 #include<iostream> 4 #include<cstdio> 5 #include<map> 6 #define ll long long 7 using namespace ...

weixin_30835923的博客 70

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

洛谷P4213 【模板】杜教筛

洛谷P4213 【模板】杜教筛

tanjunming2020的博客 1056

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

P4213-[模板]杜教筛(Sum)

正题 题目链接:https://www.luogu.com.cn/problem/P4213 题目大意 给出nnn,求∑i=1nφ(i)\sum_{i=1}^n\varphi(i)i=1∑n​φ(i) 和 ∑i=1nμ(i)\sum_{i=1}^n\mu(i)i=1∑n​μ(i) 解题思路 考虑如何将φ\varphiφ卷起来,我们可以乘上一个函数I(I(x)=1)I(I(x)=1)I(I(x)=1),就有 (φ∗I)(n)=∑d∣nφ(d)I(nd)(\varphi*I)(n)=\sum_{d|n}\v

QuantAsk 339

洛谷P4213 [模板]杜教筛(Sum) 杜教筛

P4213 [模板]杜教筛(Sum) 标签 杜教筛 前言 杜教筛的模板~ 前置知识是线性筛,莫比乌斯反演,狄利克雷卷积如果不会,需要稍微学习一下再来学杜教筛 简明题意 需要求μ\muμ和ϕ\phiϕ的前缀和,范围在231−12^{31}−1231−1,多组询问。 思路 杜教筛的模板。首先,杜教筛的核心是下面这个式子:(g函数你可以任意取) g(1)∗S(n)=∑i=1n(f...

danzh 179

P4213 【模板】杜教筛

题面:https://www.luogu.org/problem/P4213 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<...

weixin_30505043的博客 87

P4213【模板】杜教筛

题面 https://www.luogu.org/problem/P4213 题解 #include<cstdio> #include<iostream> #include<cstring> #pragma GCC optimize(2) #define ri register int #define maxn 2147483647...

weixin_30362233的博客 111

杜教筛模板

杜教筛 Source 题目\(LuoguP4213\) Code #include <bits/stdc++.h> #define ll long long #define ull unsigned long long #define xx first #define yy second using namespace std; const int N = 5000000...

weixin_30314631的博客 137

【杜教筛】【模板】P4213 【模板】杜教筛(Sum)

裸模板题 但在洛谷提交可能会超时,在洛谷上提交了一晚上,找了一晚上哪里出问题了,直到最后把一份参考的AC代码再交一遍又T了之后,蓝瘦香菇。。! 大佬博客,讲的超详细 https://www.cnblogs.com/peng-ym/p/9446555.html #include<iostream> #include<algorith...

ZangWhe 246

洛谷P4213 【模板】杜教筛(Sum)

题目链接 杜教筛模板题 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N=4e6+10; 5 int phi[N],pri[N],np,isp[N],mu[N]; 6 ll sphi[N],smu[N]; 7 unord...

weixin_30826761的博客 145

[洛谷P4213]【模板】杜教筛(Sum)

题目大意:给你$n$,求:$$\sum\limits_{i=1}^n\varphi(i),\sum\limits_{i=1}^n\mu(i)$$最多$10$组数据,$n\leqslant2^{31}-1$ 题解:杜教筛,用来求$\sum\limits_{i=1}^nf(i)$的,其中$f$是某个特殊函数。 若我们可以找到一个函数$g$,使得$g,f*g$两个函数的前缀和十分好算($...

weixin_30617737的博客 170

洛谷 P4213 【模板】杜教筛(Sum) 题解

啊,真的啊,就是居然既没有TLE,也没有MLE,你不禁想问这什么题也太垃圾了吧。,结果弄了半天没方便多少,交上去还莫名其妙地RE了,一怒之下就直接暴力了。数论就是这样,随便写写就过了。人生也是这样,随便活活就算了。这道题真的太水了,连这都能过,常数都不卡一下,不愧是个板子。本来是打算反演求φ的,...

m0_69702929的博客 228
上一篇: 洛谷P2522 容斥原理+莫比乌斯反演
下一篇: 牛客P21546 莫比乌斯反演+杜教筛
stdforces
博客等级 码龄4年 9粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值