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 }