[常见积性函数的线性筛]【学习笔记】

【欧拉函数】

φ(n)=n(1-1/p1)(1-1/p2)...(1-1/pk)

通过上式易发现 p[j]|i时 phi[i*p[j]]=phi[i]*p[j] 因为phi[i]的n是n*p[j]/p[j],其他的部分一样

证明:http://www.cnblogs.com/candy99/p/6200660.html

void sieve(){
    phi[1]=1;
    for(int i=2;i<=n;i++){
        if(!vis[i]){
            p[++m]=i;
            phi[i]=i-1;
        }
        for(int j=1;j<=m&&i*p[j]<=n;j++){
            vis[i*p[j]]=1;
            if(i%p[j]==0){
                phi[i*p[j]]=phi[i]*p[j];
                break;
            }
            phi[i*p[j]]=phi[i]*(p[j]-1);
        }
    }
    for(int i=1;i<=n;i++) s[i]=s[i-1]+phi[i];
}


【约数个数】

根据乘法原理,n的约数个数为∏{i=1...r}(ai+1)

由上式可得 p[j]|i时 facnum[i*p[j]]=facnum[i]/(minfac[i]+1)*(minfac[i*p[j]]+1)



【约数和】

n=p1^a1*p2^a2*…*pr^ar 
则其约数和=∏{i=1...r}(Σ{j=1..aj}pi^j) 
p[j]|i时,得到sumfac[i*p[j]]
需要除以Σ(p[j]^(0..minfac[i])) 
再乘以Σ(pris[j]^(0..minfac[k]) 
其中minfac[k]=minfac[i]+1 
这样开两个辅助数组记录 
t1[i]=Σ(minfac[i]^(0..a[minfac[i]])) 
t2[i]=mindiv[i]^a[minfac[i]]


int notp[N],p[N],mu[N],minfac[N],t1[N],t2[N],sf[N];
void sieve(){
    mu[1]=1;
    sf[1].s=1;
    for(int i=2;i<N;i++){
        if(!notp[i]){
            p[++p[0]]=i,mu[i]=-1;
            minfac[i]=i;
            sf[i]=i+1;
            t1[i]=i+1;
            t2[i]=i;
        }
        for(int j=1,k;j<=p[0]&&(k=i*p[j])<N;j++){
            notp[i*p[j]]=1;
            minfac[k]=p[j];
            if(i%p[j]==0){
                mu[i*p[j]]=0;
                t2[k]=t2[i]*p[j];
                t1[k]=t1[i]+t2[k];
                sf[k]=sf[i]/t1[i]*t1[k];
                break;
            }
            mu[i*p[j]]=-mu[i];
            t1[k]=1+p[j];
            t2[k]=p[j];
            sf[k]=sf[i]*sf[p[j]];
        }
    }
}
时间: 2024-10-21 00:18:28

[常见积性函数的线性筛]【学习笔记】的相关文章

积性函数,线性筛入门 HDU - 2879

HDU - 2879HeHe 题意:He[N]为[0,N−1]范围内有多少个数满足式子x2≡x (mod N),求HeHe[N]=He[1]×……×He[N] 我是通过打表发现的he[x]=2k,k为x是质因子个数,不过这是可以通过积性函数证明的. 关于积性函数的定义: 对于正整数n的一个算术函数 f(n),若f(1)=1,且当a,b互质时,f(ab)=f(a)f(b),在数论上就称它为积性函数.若对于某积性函数 f(n) ,就算a, b不互质,也有f(ab)=f(a)f(b),则称它为完全积性

常用积性函数的线性筛法整理

简单整理推导加代码,留复习用. 线性筛素数 最简单也最基础,直接看代码就好了\(--\) code: void Euler_Phi_Prime(int n) { is_prime[1] = true; for (int i = 2; i <= n; i++) { if (!is_prime[i]) prime[++cnt] = i; for (int j = 1; j <= cnt && i * prime[j] <= n; j++) { is_prime[i * pri

常见积性函数(转自百科)

前面做hdu1452 用过积性函数这个东西...刚才遇到又不会了.所以弄一点资料提醒一下自己 在非数论的领域,积性函数指所有对于任何a,b都有性质f(ab)=f(a)f(b)的函数. 在数论中的积性函数:对于正整数n的一个算术函数 f(n),若f(1)=1,且当a,b互质时f(ab)=f(a)f(b),在数论上就称它为积性函数. 若对于某积性函数 f(n),就算a, b不互质,也有f(ab)=f(a)f(b),则称它为完全积性的.[1] s(6)=s(2)*s(3)=3*4=12; s(20)=

线性筛及其扩展-积性函数

线性筛 埃氏筛 对于每个数x,枚举其倍数,将kx筛去. 在埃氏筛过程中,每个数都会被筛掉多次,且对于每个数x,枚举其倍数的次数为\(\frac{n}{x}\) 故埃氏筛的时间复杂度为\(\sum_{i=1}^{n}\)\(\frac{n}{i}\)=n\(\sum_{i=1}^{n}\)\(\frac{1}{i}\)=\(n ln(n)\) 欧拉筛 在埃氏筛中,每个数会被筛掉多次,想要进一步下降复杂度,我们要求每个数只会被筛一次. 要想将多种筛去x的方法固定(唯一).我们就要采用一种方法-"最小

bzoj 4407 于神之怒加强版 —— 反演+筛积性函数

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4407 推导如这里:https://www.cnblogs.com/clrs97/p/5191506.html 然后发现 \( F(D) \) 是一个积性函数,可以筛质数的同时筛出来: 首先,单个质数 \( p \) 时只有 \( d=1 \) 和 \( d=p \) 两个因数,所以 \( F[p] = p^{k} - 1 \) 然后如果筛到互质的数,直接把 \( F() \) 相乘即可:

HDU2879 HeHe 数论积性函数

题目名字有点搓,做题时没做出来,学长他们做出了,发现跟网上题解的思路没太大区别,网上所有题解的分析也都转自同一个地方,看样子这道题目不是那么好想的,没办法按照解析画了半天,计算器按了半天,理解了,自己敲出来了,觉得值得留念,打算再刷几道这样的 转自:http://blog.csdn.net/kksleric/article/details/8096914 定义:对于正整数n的一个算术函数 f(n),若f(1)=1,且当a,b互质时f(ab)=f(a)f(b),在数论上就称它为积性函数.若对于某积

bzoj 2693: jzptab 线性筛积性函数

2693: jzptab Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 444  Solved: 174[Submit][Status][Discuss] Description Input 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M Output T行 每行一个整数 表示第i组数据的结果 Sample Input 1 4 5 Sample Output 122 HINT T <= 10000 N, M<=10000000

读贾志鹏《线性筛法与积性函数》笔记

1.欧拉筛法在线性时间内求素数以及欧拉函数 代码: 1 procedure get; 2 var i,j,k:longint; 3 begin 4 tot:=0; 5 fillchar(check,sizeof(check),false); 6 for i:=2 to n do 7 begin 8 if not(check[i]) then 9 begin 10 inc(tot); 11 p[tot]:=i; 12 fai[i]:=i-1; 13 end; 14 for j:=1 to tot

hdu2421-Deciphering Password-(欧拉筛+唯一分解定理+积性函数+立方求和公式)

Deciphering Password Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2357    Accepted Submission(s): 670 Problem Description Xiaoming has just come up with a new way for encryption, by calculati