求一个数的因子个数及其因子和

在数论中有一个质因数分解定理,可利用其中的一些性质来求一个数的因子个数及其因子和,下面附上定理及代码。

#include<bits/stdc++.h>
using namespace std;
//求因子个数 
int fun1(int x)
{
    int len=sqrt(x);
    int ans=1;
    int cnt;
    for(int i=2;i<=len;i++)
    {
        cnt=0;
        while(x%i==0)
        {
            x/=i;cnt++;
        }
        ans*=(1+cnt);
    }
    if(x>1) ans*=2;//x>1说明还剩最后一个因子,所以要乘(1+1)
    return ans;
}
//求因子和 
int fun2(int x)
{
    int len=sqrt(x);
    int ans=1;
    int cnt;
    for(int i=2;i<=len;i++)
    {
        cnt=1;
        while(x%i==0)
        {
            cnt*=i;
            x/=i;
        }
        ans*=(cnt*i-1)/(i-1);
    }
    if(x>1) ans*=(x+1);同理剩下一个因子,且其指数为1,所以乘以(x^2-1)/(x-1)=(x+1)
    return ans;
}
int main()
{
    int n;
    cin>>n;
    printf("%d %d",fun1(n),fun2(n));
    return 0; 
} 
posted @ 2021-04-25 20:24  AC--Dream  阅读(708)  评论(0编辑  收藏  举报