欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

因子个数 和因子和

程序员文章站 2022-06-08 12:09:03
...

 

【因子个数】

因子个数 和因子和

 

实现代码:

int count(int n)///求因子的个数
{
    int s=1;///记录总共的素因子的个数
    for(int i=2;i*i<=n;i++)
        if(n%i==0)
    {
        int a=0;///记录的是每个素因子的个数
        while(n%i==0)
        {
            n/=i;
            a++;
        }
        s=s*(a+1);
    }
    if(n>1)
        s=s*2;
    return s;
}

【因子和】

单独判断:

因子和:一个数的所以因子的和就叫因子和。

证明:牛顿二项式

例如:

12 = 2 * 2 * 3

12的因子为1 2 3 4 6 12  相加和为28

计算方法是把12分解为质因数的表达形式2^2*3

因子和sum = (1 + 2 + 2*2 )*(1 + 3) = 28;

再如
30 = 2 * 3 * 5;
30的因子为1 2 3 5 6 10 15 30相加和为 = 72
因子和sum = (1 + 2)*(1 + 3)*(1 + 5) = 3 * 4 * 6 = 72;


int sum(int n)///求因子的和
{
    int s=1;
    for(int i=2;i*i<=n;i++)
        if(n%i==0)
    {
        int a=1;///记录素因子的乘积
        while(n%i==0)
        {
             n/=i;
             a*=i;
        }
        s=s*(a*i-1)/(i-1);
    }
    if(n>1)
        s=s*(1+n);
    return s;
}

 

打表法:

const int N=500001;  
int p[N];  //p[i]表是i的因子和
void init()    
{     
	int n=N;
	memset(p,0,sizeof(p));
     for(int i=1;i<=n;i++)      //因子和打表
     	for(int j=2;j*i<=n;j++)
     		p[i*j]+=i;
	 
}  

例题:HDU 1215  七夕节