一、题目
整除问题_牛客题霸_牛客网 (nowcoder.com)
二、普通数字的素因数分解
假如对n进行素因数分解。先利用素数筛法筛选出0~n范围内的全部素数。然后依次遍历这些素数,用n除以这些素数,直至无法整除。然后接着用下一个素数作为除数,直到n无法继续分解为止。
map<int,int> result_list;
for(int i=0;i<prime_counts && prime[i]<=n;i++){
int count=0;
while(n%prime[i]==0){
n/=prime[i];
count++;
}
result_list[prime[i]]=count;
}
三、阶乘的素因数分解
以12!为例,12的素因数为2,3,5,7,11。
12 ! = 12×11×10×9×8×7×6×5×4×3×2×1
我们先来找12!中有几个素因数2。先来发掘因数2的个数。2,4,6,8,10,12都是2的倍数,所以,它们中都至少有一个2作为因数,这就是6个。
12!=1×2×3×(2×2)×5×(2×3)×7×(2×2×2)×9×(2×5)×11×(2×2×3)
然后我们发现中还有一个2,因此只需看看有几个即可。可以发现4、8、12分别含有一个2,这就有三个。
然后接着看还有哪个1是没被统计到的,可以发现中有个1是没被统计到的。
用公式表示实际上就是:
也就是: