回复 21楼 令狐少侠56
1,无需刻意判断素数,一个合数的最小因数肯定是素数(查了下,好像没这个说法,但经得起验证),当这个数没有因数时他本身就是素数。
2,for(i=2;(i*i<=n)&&(n%i);i++);这个循环退出条件是找到最小因数(条件n%i)或这个数已经是素数(条件i*i<=n),所以这个循环结束后,如果i*i>n则说明n为素数,否则i就是n的最小因数。
3,递归只发生在找到最小素数时,此时n可以整除i,i是最小素数。首先将最小素数存入数组,然后数组指针递增后递归。
4,当n为素数后递归结束,n为最后一个因数,把n存储进数组,逐级退出递归。
以上就是我的代码递归找质因数的大致思路,关键是一个合数的最小因数是素数的观点减少了很多重复判断代码。另:即使是找无符号的32位的最大质数用电脑运算也是很快的,因为只是判断一个数是否为质数,无需采取查表法,如果是判断32位数的范围内有多少个质数,这种方法就比查表法慢多了,用筛法建表也不合适,因为需要4g内存空间,估计可以像T版那样建个素数表查找,百度了下,10亿内的素数有50847534个,约占204兆字节,不知道读这么大的文件要多长时间。