首先,要问你短时间是多长时间,以下是我思考的过程:
1、看到这个问题,我首先想到的就是缩小这个数量级,目前能够想到的就是开方的方法缩小数量级到10的8次方,缩小到这个数量级的想法就是打印10的8次方以下的质数表,而打印这个质数表的复杂度是o(n),也就是要一亿次。
2、有了质数表,那么就可以求出这个质因数的分解式,这个复杂度主要取决于质数表的大小,相对于一亿来说的话应该不大,质因数的个数不超过64个,因为N不大于2的64次方。
3、然后就是根据质因数的分解式,求约数,这个过程的复杂度和约数的个数有关,没仔细算过,大概估计每个质因子都不同的话,应该是16个质因子,所以约数个数应该少于2的16次方个,这样的话,其实复杂度也不算高,就是算法有点复杂,没法跟一亿比综上所述的话,复杂度最高的就是打印素数表,但是素数表只需要打印一次,如果可以打印一次素数表以后,再去求约数的话,那么就有可能达到你的要求,当然,还要看你是什么方式,还有限制是时间是多长。以上是我的一点想法,希望对你有帮助,好长时间不做acm了。