今天说好的帮小马同学做微软夏令营的机试题目,还好,时间来的及,只是。。。题目略难。暂时搞不定啊!!!
小马同学分给我的题目是求解一个整数的因子个数的问题,这个我以前在《编程之美》上见过,整理下思路,参考一下别人的解释,写出自己的源码。
记不清在《编程之美》多少页了,但是相关题目大概还是记得,就是求解一个整数的阶乘结果又多少个0,实际就是求解质因数2和5的个数,不过这里扩展了一下。
以下是我写的测试程序;在机器上测试了一下,要比直接循环判断的方法快的多。
1 | #include <iostream> |
当然,微软不可能出这么简单的题目,重点在后面,测试用例有一部分是大约10的16次方的,也就说用int类型是不能表示的。上面的程序是不行了,需要考虑大数问题。
这个暂时不考虑了,
其实求解这个问题的关键是一个数学定理:
一个整数的所有因子数等于其每个素因子的个数加一之后的乘积(1+p1)(1+p2)…(1+pn),其中p1、p2、…、pn分别为该整数的所有n个素因子P1、P2、…Pn的相应个数。