质因数分解求因数和 以12为例 12的因数和 1+2+3+4+6+12=28 12的质因数幂次乘积 2^2 * 3^1 = 12 28 = ( 1 + 2 + 2^2 ) * ( 1 + 3^1 ) 对于特殊的数比如 1,质数均成立
C语言刚入门,水平有限
#include<stdio.h>
#include<math.h>
int fact_sumf(int test);
int main(int argc, char** argv) {
int test = 0;
int sum = 0;
scanf_s("%d", &test);
sum = fact_sumf(test);
printf("sum = %d ", sum);
getch();
return 0;
}
/*
* 质因数分解求因数和
* 以12为例
* 12的因数和 1+2+3+4+6+12=28
* 12的质因数幂次乘积 2^2 * 3^1 = 12
* 28 = ( 1 + 2 + 2^2 ) * ( 1 + 3^1 )
* 对于特殊的数比如 1,质数均成立
*/
int fact_sumf(int test) {
int i = 2; //初始化第一个质数2
int sum = 1; //因为因数和是乘积所以初始化为1
int prime_fact = 0; //初始化质因数为0
do {
int power = 0; //每一个相同质因数的幂次初始化为0
while (test % i == 0) {
test /= i;
prime_fact = i;
power++; //重复进入while循坏说明质因数是同一个,就增加一个幂次
//printf("%d ", i); //测试用代码
}
//printf("%d %d\n", ret,power); //测试用代码
int temp = 1;
for (int i = 1; i <= power; i++) {
temp += pow(prime_fact, i);
}
//printf("%d\n", temp); //测试用代码
sum *= temp;
i++; //测试下一个数
} while (test != 1);
return sum;
}
|