因子

1.求一个数的因子数

int count(int n)  //求n的因子数 
{
    int num = 1;
    for(int i = 2; i * i <= n; i ++)
    {
        if(n % i == 0)
        {
            int p = 0;
            while(n % i == 0)
            {
                n /= i;
                p ++;
            }
            num *= p + 1;
        }
    }
    if(n > 1)  //最后不是1的话 也算一个因子 
        num *= 2;
    return num;
}

 2.求1~MAXN范围内各个数的因子和

 1 void get_divisorsum()
 2 {
 3     mem(sum, 0);
 4     for(int i = 1; i * i <= MAXN; i ++)
 5     {
 6         for(int j = i; i * j <= MAXN; j ++) //注意这里是 i * j 
 7         {
 8             sum[i * j] += i + j;
 9             if(i == j)
10                 sum[i * j] -= i;   //例如 2 * 2 = 4, 2对于4而言只出现了一次,避免重复
11         }
12     }
13 }
原文地址:https://www.cnblogs.com/yuanweidao/p/11741610.html