线性筛 [约数个数/约数和]

提供手工生产推。 用长度的筛筛约数数量和约数和,写视频博客并记载着陆。。但互联网网络上的许多必不可少的事物推进它。。

按照算术的根本定理,敝可以赚得,每个无符号整数大于或量2。,可以决定成这种齐式。。

,经过 p 为素数。

长度的筛执意任何时候被最小素限定性的给筛出。

长度的挑选器 (筛素数) [我身体的更频繁地应用它]

const int N=1e5+5;
bool 评分[ n]
int 乏味[实质的]
int cnt;
void initial()
{
    cnt=0;
    for (int) i=2 ; i

这是敝最经用的长度的筛。,自然,敝也将用于挑选欧拉功能和M往往斯功能。,由于可积功能根本上可以用长度的S来挑选。。

喂缺勤写。。T_T 每身体的都必不可少的事物挑选它。

约数数量

算术根本定理,按照产生分歧素数限定性的的例子。,敝可以找到全部。 N 的约数的数量。


按照刚过去的措辞,敝可以用长度的煎饼用浅锅筛出电流。 N 的约数数量。

筛分法,敝必要拘押最小素数的数量。。

下面是公开宣称。

d(i) 表现 i 的约数数量  

NUM[I] 表现 i 最小素数的数量

普里姆[我] 表现 第 i 个素数

① 流传的数是素数。

这对敝来说倾向于接纳。,流传的的 d(N) = (1+1) = 2

由于素数除非第一素限定性的。(即它本身),键入是 1 。

最小素数限定性的数。
num [ n] = 1

② i%普里姆[ J ] !=0

这种情况,敝可以赚得 i 在中部,否决票牵制 普里姆[ J ] 主要因素,只,i*普里姆[ J ] 中, 牵制第一 普里姆[ J ]

敝可以从火线接纳它。 i 的拥有约数数量   

继把它临时学的。 如今更多 素限定性的 普里姆[ J ] 的数量

因而最后的 d(i*普里姆[ J ]) = d(i)*d(普里姆[ J ])

由于 流传的的 普里姆[ J ]  一定是 i*普里姆[ J ] 最小素数限定性的 (由于小到大计数啊)!), 敝必要记载最小素数的数量。

因而拘押每一数量字。 num[i*普里姆[ J ]] = 1

③ i%普里姆[ J ]==0

这种情况, i 它必然要反正牵制 1 个 普里姆[ J ] ,同时 普里姆[ J ] 也显然是 i 最小素数限定性的,由于每个计数都是从素数的计数开端的。。

而 i*普里姆[ J ] 比起 i 有超过第一主要因素。,即 

这么 i*普里姆[ J ] 的约数数量 必不可少的事物是 

接近末期的,敝会用到敝屯积记载下最小素数限定性的数量了,由于敝可以赚得。 i 最小素数限定性的数量 为 NUM[I] ,而 d(i) 中 先前包罗在内。

此刻敝 敝可以停止进行第第一物品。继乘以   ,你可以接纳它。 d(i*普里姆[ J ]) 的约数数量了。

d(i*普里姆[ J ]) = d(i) / (NUM[I]+1) * (NUM[I]+2)

流传的 num[i*普里姆[ J ]] = NUM[I]+1 ,持续拘押最小素数的数量。。

按照这么,敝可以用长度的筛列出。 1 到 N 的数的约数数量。

const int N=1e5+5;
bool 评分[ n]
int 乏味[实质的],d[N],num [ n];
int cnt;
void initial()
{
    cnt=0;
    d[1]=1;
    for (int) i=2 ; i

约数和

[说起来公开宣称跟约数数量根本平等地,纯粹某个差额罢了。

算术根本定理,条件规定N的约数的和,你可以用刚过去的措辞。。


异样,敝平等地你可以用刚过去的措辞。去筛出流传的 N 的约数和。

筛分法,敝必要拘押最小素数的和。,即

下面是公开宣称。

SD(I) 表现 i 的约数和

SP[Ⅰ] 表现 i 最小素数限定性的的等比级数的和 我不赚得该怎样描述。,下面提到的。

普里姆[我] 表现第 i 个素数

流传的数是素数。。

敝可以倾向于地接纳这种情况。,流传的的
SD(n) = 1+i

由于素数除非第一素限定性的。,也执意说,除非第一结成。,高的例子是 1 。

而刚过去的物品 Sp[n] = 1+i

② i%普里姆[ J ] !=0

这种情况,敝可以赚得 i 在中部,否决票牵制 普里姆[ J ] 主要因素,只,i*普里姆[ J ] 中, 牵制第一 普里姆[ J ]

敝有火线。 i 的约数和了,不包罗 (1+普里姆[ J ]) 这一,而 i*普里姆[ J ] 的约数和纯粹多了这一。

i 的约数和是

这么 i*普里姆[ J ] 终极结实必不可少的事物是


sd(i*普里姆[ J ]) = SD(I) * sd(普里姆[ J ])

而 普里姆[ J ] 是 i*普里姆[ J ] 最小素数限定性的 (由于小到大计数啊)! [第二次],如此sp[i*普里姆[ J ]] = 1+普里姆[ J ] 

③ i%普里姆[ J ]==0

这种情况, i 它必然要反正牵制 1 个 普里姆[ J ] ,同时 普里姆[ J ] 也显然是 i 最小素数限定性的,由于每个计数都是从素数的计数开端的。。

只不过 i*普里姆[ J ] 比起 i 它不只仅是最小的素限定性的。

这么 i*普里姆[ J ] 的约数和执意

接近末期的,敝用到后面拘押着陆最小素数限定性的那一的和,由于 i 中 必不可少的事物是


敝可以赚得最小素数的和。,而且接纳

纯粹第第一物品。 乘以 普里姆[ J ] 继再 加一,你可以接纳它。了。

sd(i*普里姆[ J ]) = SD(I) / SP[Ⅰ] * (SP[Ⅰ]*普里姆[ J ]+1)

流传的 sp[i*普里姆[ J ]] = SP[Ⅰ]*普里姆[ J ]+1,持续固执己见最小素数的和。。

按照这么,敝可以用长度的筛列出。 1 到 N 的约数和。

const int N=1e5+5;
bool 评分[ n]
int 乏味[实质的]
long long SD[N],Sp[n];
int cnt;
void initial()
{
    cnt=0;
    sd[1]=1;
    for (int) i=2 ; i

发表评论

电子邮件地址不会被公开。 必填项已用*标注