TOJ 1868. Count the factors

题目大意给出一个数n(n<=106),问这个数有多少个质因数。     
小小分析一下106还是一个比较大的数滴。首先想到的方法是把素数存起来使用,可以不必使用试除。继续思考,如果把106内的素数计算出来还是有很大工作量的。其实,对于一个数n,在sqrt(n)到n之间最多只有一个质因数,如果有两个的话...上帝就要崩溃了...那么我们也就只需要计算1000之内的素数了。除掉n中的所有小于sqrt(n)的质因数,有几个除几个,如果剩下1,那么就不存在sqrt(n)到n之间的质因数,反之则存在。那么我们计数的工作量就大大减少了。以下是关键部分的代码,prime是一个vector<int>,里头保存了1000以内的素数。


Code

 

posted @ 2008-08-19 21:28  DosXP  阅读(404)  评论(0编辑  收藏  举报