约数定理(约数个数定理,约束和定理)

约数定理(约数个数定理,约束和定理)约数个数定理:对于一个大于1正整数n可以分解质因数:则n的正约数的个数就是。其中a1、a2、a3…ak是p1、p2、p3,…pk的指数。定理简证:首先同上,n可以分解质因数:n=p1^a1×p2^a2×p3^a3*…*pk^ak,由约数定义可知p1^a1的约数有:p1^0,p1^1,p1^2……p1^a1

约数个数定理:

对于一个大于1正整数n可以分解质因数

约数定理(约数个数定理,约束和定理)
则n的正约数的个数就是

约数定理(约数个数定理,约束和定理)

其中a1、a2、a3…ak是p1、p2、p3,…pk的指数。

定理简证:

首先同上,n可以分解质因数:n=p1^a1×p2^a2×p3^a3*…*pk^ak,
由约数定义可知p1^a1的约数有:p1^0, p1^1, p1^2……p1^a1 ,共(a1+1)个;同理p2^a2的约数有(a2+1)个……pk^ak的约数有(ak+1)个。
故根据乘法原理:n的约数的个数就是(a1+1)(a2+1)(a3+1)…(ak+1)。

例题:

例题:正整数378000共有多少个
正约数
解:将378000
分解质因数378000=2^4×3^3×5^3×7^1
由约数个数定理可知378000共有正约数(4+1)×(3+1)×(3+1)×(1+1)=160个。

约数和定理:

对于一个大于1正整数n可以
分解质因数:n=p1^a1*p2^a2*p3^a3*…*pk^ak,
则由
约数个数定理可知n的正约数有(a₁+1)(a₂+1)(a₃+1)…(ak+1)个,
那么n的(a₁+1)(a₂+1)(a₃+1)…(ak+1)个正约数的和为
f(n)=(p1^0+p1^1+p1^2+…p1^a1)(p2^0+p2^1+p2^2+…p2^a2)…(pk^0+pk^1+pk^2+…pk^ak)

定理证明:

证明:若n可以
分解质因数:n=p1^a1*p2^a2*p3^a3*…*pk^ak,
可知p1^a1的约数有:p1^0, p1^1, p1^2……p1^a1
同理可知,pk^ak的约数有:pk^0, pk^1, pk^2……pk^ak ;
实际上n的约数是在p1^a1、p2^a2、…、pk^ak每一个的约数中分别挑一个相乘得来,
可知共有(a₁+1)(a₂+1)(a₃+1)…(ak+1)种挑法,即约数的个数。

乘法原理可知它们的和为
f(n)=(p1^0+p1^1+p1^2+…p1^a1)(p2^0+p2^1+p2^2+…p2^a2)…(pk^0+pk^1+pk^2+…pk^ak)

例题:

例题:正整数360的所有正约数的和是多少?
解:将360分解质因数可得
360=2^3*3^2*5^1
由约数和定理可知,360所有正约数的和为
(2^0+2^1+2^2+2^3)×(3^0+3^1+3^2)×(5^0+5^1)=(1+2+4+8)(1+3+9)(1+5)=15×13×6=1170
可知360的约数有1、2、3、4、5、6、8、9、10、12、15、18、
20、24、30、36、40、45、60、72、90、120、180、360;则它们的和为
1+2+3+4+5+6+8+9+10+12+15+18+20+24+30+36+40+45+60+72+90+120+180+360=1170

所有因子个数τ(n)与所有因子的和σ(n)都是乘(积)性函数。

定义1:因子和函数σ定义为整数n的所有正因子之和,记为σ(n)。

定义2:因子个数函数τ定义为正整数n的所有正因子个数,记为τ(n)。


定理1:设p是一个素数,a是一个正整数,那么

                                σ(n)=1+p+p^2+……+p^a=【p^(a+1)-1】/(p-1)

                                τ(n)=a+1

定理2:设正整数n有素因子分解 n =(p1^α1)*(p2^α2)*(p3^α3)* ……. *(pk^αk),那么

             σ(n)=【(p1^α1)-1】/(p1-1) * 【(p2^α2)-1】/(p2-1) * …..  *【(pk^αk)-1】/(pk-1)

             τ(n)=(α1+1)*(α2+1)*(α3+1)*……*(αk+1)

求因子个数:

int prime[maxn],nprime;  
int vis[maxn];  
  
void getprime(){
    nprime = 0;
    memset(vis,0,sizeof(vis));
    for(int i = 2; i <= 450; i++){
        int t = 450/i;
        for(int j = 2; j <=t; j++)
            vis[i*j] = 1;
    }
    for(int i = 2; i <= 450; i++){
        if(!vis[i])
            prime[nprime++] = i;
    }
}
  
int factor_count(int n){  
    int ans = 1,sum;  
    int k = sqrt(n*1.0);  
    for(int i = 0; prime[i] < k; i++){  
        if(n % prime[i] == 0){  
            sum = 0;  
            while(n % prime[i] == 0){  
                sum++;  
                n /= prime[i];  
            }  
            ans *= (a+1);  
        }  
    }  
    if(n > 1)  
        ans *= 2;  
    return ans;  
}  


求因子和:

int prime[maxn],nprime;
int vis[maxn];

void getprime(){
    nprime = 0;
    memset(vis,0,sizeof(vis));
    for(int i = 2; i <= 450; i++){
        int t = 450/i;
        for(int j = 2; j <=t; j++)
            vis[i*j] = 1;
    }
    for(int i = 2; i <= 450; i++){
        if(!vis[i])
            prime[nprime++] = i;
    }
}

int pow_mod(int a,int n,int MOD){
    int ans = 1;
    while(n){
        if(n&1)
            ans = (ans*a)%MOD;
        n >>= 1;
        a = (a*a)%MOD;
    }
    return ans;
}

int factor_sum(int n){
    int ans = 1,sum;
    int k = sqrt(n*1.0);
    for(int i = 0; prime[i] < k; i++){
        if(n % prime[i] == 0){
            sum = 0;
            while(n%prime[i] == 0){
                sum++;
                n /= prime[i];
            }
            ans *= (pow_mod(prime[i],sum+1,MOD)-1)/(prime[i]-1);
        }
    }
    if(n > 1)
        ans *= ans(n*n-1)/(n-1);
    return ans;
}

今天的文章约数定理(约数个数定理,约束和定理)分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/29593.html

(0)
编程小号编程小号

相关推荐

发表回复

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