首页 > 其他分享 >数论 工具 线性筛

数论 工具 线性筛

时间:2024-09-13 11:04:48浏览次数:8  
标签:函数 数论 sum pri times low 线性 工具 sigma

由于做莫反题需要大量的基础函数知识,于是有了这篇文章将我做到的函数都记录下来。

持续施工中。


约数和函数 \(\sigma\)

定义:\(\sigma(x)=\sum_{d|x} d\)。

证其为积性函数:

设 \(x=\prod p_i^{a_i}\),设 \(d\) 为 \(x\) 的质因数个数,那么发现:

\[\begin{aligned}\sigma(x)&=\sum_{i_1=0}^{a_1}\sum_{i_2=0}^{a_2}\cdots\sum_{i_d=0}^{a_d} p_1^{i_1}p_2^{i_2}\cdots p_d^{i_d}\\&=\sum_{i_1=0}^{a_1} p_1^{i_1}\sum_{i_2=0}^{a_2}p_2^{i_2}\cdots \sum_{i_d=0}^{a_d}p_d^{i_d}\\&=\prod_{i=1}^d \sum_{j=0}^{a_i}p_i^j \end{aligned} \]

我们发现当 \(d=1\) 时,\(\sigma(x)=\sum_{i=0}^{a_1} p_1^i\),即上述式子可以转化为:

\[\sigma(x)=\prod_{i=1}^d \sigma(p_i^{a_i}) \]

推广可得:

\[\sigma(a\times b)=\sigma(a)\sigma(b)\quad gcd(a,b)=1 \]

证毕。

接下来考虑如何线性筛。考虑我们当前的数 \(i\),令其最小的质因子为 \(p\)。由积性函数可知,我们需要先使两个数 \(a,b\) 互质,再由 \(\sigma(a\times b)=\sigma(a)\sigma(b)\) 转移。那么我们若想从 \(\sigma(i)\) 转移至 \(\sigma(i\times p)\),需要先将 \(i\) 中所有的质因子 \(p\) 除掉,转移式子即为 \(\sigma(i\times p)=\sigma(\frac{i}{p^{a_1}})\sigma(p^{a_1+1})\)。用 \(low_i\) 维护 \(\sigma(p^{a_1})\),那么 \(low\) 的转移有 \(low_{i\times p}=low_{i}\times p+1\),此时 \(\sigma\) 的转移有 \(\sigma(i\times p)=\frac{\sigma(i)}{low_i}\times low_{i\times p}\)。

实现中,当出现 \(i \mod p_j=0\) 的情况就用上述方法转移,否则 \(\sigma_{i\times p_j}\) 直接用积性函数性质求,\(low_{i\times p_j}\) 的值等于 \(\sigma(p_j)\),因为如果此时 \(i\) 中有比 \(p_j\) 更小的质因子的话,早在前面就会被筛出来然后 break 掉。

因为 \(\sigma\) 跟 \(o\) 挺像,所以在代码中 \(o_i\) 表示 \(\sigma(i)\)。

int pri[N],tot,o[N],low[N];
bool vis[N];
void Wprepare()
{
	o[1]=1;
	for(int i=2;i<=N;i++)
	{
		if(!vis[i]) pri[++tot]=i,o[i]=low[i]=i+1;
		for(int j=1;j<=tot;j++)
		{
			if(i*pri[j]>N) break;
			vis[i*pri[j]]=1;
			if(i%pri[j]==0)
			{
				low[i*pri[j]]=low[i]*pri[j]+1;
				o[i*pri[j]]=o[i]/low[i]*low[i*pri[j]];
				break;
			}
			low[i*pri[j]]=pri[j]+1;
			o[i*pri[j]]=o[i]*o[pri[j]];
		}
	}
}

例题是 [SDOI2014]数表,莫反部分不难,难点在理解如何筛约数和以及动态维护某个函数前缀和,练习 \(\sigma\) 函数的好题。

标签:函数,数论,sum,pri,times,low,线性,工具,sigma
From: https://www.cnblogs.com/Ratio-Yinyue1007/p/18409919

相关文章

  • 信号与线性系统实验四 离散系统的时域及变换域分析
    文章目录一、实验目的二、实验内容与原理三、实验器材四、实验步骤五、实验数据及结果分析第一部分:离散时间信号的时域基本运算第二部分:离散LTI系统的时域分析第三部分:离散LTI系统Z域分析六、实验结论七、其他(主要是心得体会)一、实验目的  1.通过本实验的练习......
  • 数论 莫比乌斯反演
    前置需求数论分块概念对于一个形如\(\sum_{x=1}^n\lfloor{\frac{n}{x}}\rfloor\)的式子,我们发现对于一部分的\(x\),它们的\(\lfloor{\frac{n}{x}}\rfloor\)值相同,因此我们没必要\(\mathcal{O(n)}\)计算,可以采用数论分块的办法将这一步的复杂度降低至\(\mathcal{O(\sqrt......
  • 快速编写一款python漏洞批量检测工具
    一、前言以下列检测脚本示列:importrequestsimporturllib3importre,string,randomfromurllib.parseimporturljoinimportargparseimporttimeimportsslssl._create_default_https_context=ssl._create_unverified_contexturllib3.disable_warnings(ur......
  • PbootCMS程序后台登录密码重置工具
    如果你忘记了PbootCMS后台的登录密码,可以使用官方提供的密码重置工具来重置密码。以下是使用PbootCMS密码重置工具的步骤:1.下载重置工具访问PbootCMS官网或其他可信来源下载密码重置工具。通常是一个名为 resetpw.php 的文件。2.上传重置工具将下载好的 resetpw.php......
  • "独立开发者出海技术栈和工具" 现已上线!
    ......
  • 《黑神话悟空》画面设置指南:dll修复工具提高游戏流畅度
    在《黑神话悟空》中,画面设置对游戏体验有着至关重要的影响。为了在保证流畅度的前提下获得最佳画质,我们需要对各项设置进行合理调整。以下是详细的设置指南和个人建议。 优先级:帧率优先于画质首先,我们需要明确一个原则:帧率优先于画质。游戏的流畅度直接影响操作体验,尤其是在......
  • Ai绘画|AI赚钱的路子技巧全流程(附写作视频工具+教程+提示词+抖音接单变现渠道)
    简单!AI赚钱真的很香,今天这篇文章带你打破信息差,AI绘画赚钱的路子、接单渠道,非常适合普通人做。来看我亲生同事新手做AI绘画第25天赚钱的成果:我整理了AI赚钱的渠道和方法,包括AI绘画、AI写作、AI生成短视频等多个赛道的变现。1、AI头像壁纸赚钱这个渠道特别简单,就是在抖......
  • 小工具:windows测试自己的网络类型
    介绍NatTypeTester是一款NAT路由类型检测工具,测试NAT类型的小工具,方便与各位玩家判断自己网络是否适用于使用STUN内网穿透。NAT类型一般分成下列4种:网络类型1.FullConeNAT(彻底圆锥型)2.RestrictedConeNAT(详细地址限定圆锥型)3.PortRestrictedConeNAT......
  • 【智能终端】HBuilder X 与微信开发者工具集成与调试实战
    目录1.需求和理解库、框架、平台1.1需求1.2理解2.3库、框架、平台2.3.1库(Library)2.3.2框架(Framework)2.3.3平台(Platform)2.3.4总结2.使用HBuilderX创建第一个uni-app应用步骤1:进入DCloud 官网,下载并安装HBuilderX。步骤2:打开HBuilderX,选择新......
  • 怎么选择靠谱AI论文生成工具?看完我的试用都会明白!
    2024年上半年开始AI论文写作工具开始火了,层出不穷!作为一个经常需要写论文的懒人,我非常好奇这些AI工具的实际效果到底怎么样?为了测试不同工具的实力,我对他们都进行了试用,发现了一些意想不到的结果......这篇文章相信会对还在对AI论文生成工具观望的你们有一些启发和新的认识。......