素因子分解,求所有素因子的全排列
#include <stdio.h>
#include <string.h>
int fac[30];
int cnt[30];
int len;
long long Factorial(long long num)
{
long long ret = 1;
for(long long i = 1; i <= num; ++i)
ret *= i;
return ret;
}
int main()
{
int num,rlen;
while(scanf("%d",&num) != EOF)
{
memset(cnt,0,sizeof(cnt));
len = rlen = 0;
for(int i = 2; i*i <= num; ++i)
{
if(num%i == 0)
{
fac[len] = i;
while(num%i == 0)
{
num /= i;
cnt[len]++;
rlen++;
}
len++;
}
}
if(num > 1)
{
fac[len] = num;
cnt[len++] = 1;
rlen++;
}
long long res = Factorial(rlen);
for(int i = 0; i < len; ++i)
res /= Factorial(cnt[i]);
printf("%d %lld\n",rlen,res);
}
return 0;
}