这道题就相比之前那对好数简单的多
首先我们试试正常方法:一个一个遍历,看看是否有三个因子
时间复杂度:O(x)O(x)O(x)
但是代入x<=1012x <= 10^{12}x<=1012会发现百分百超时
name,还有其他办法吗?
我们注意到,一个数的因子,一定有1和它本身,也就是两个因子(1除外)
于是我们只要找到剩下那个因子就行了
但我们又又又又注意到,如果一个数x有因子y,那它就必然有因子(x/y),那在算上1和x就有四个因子了呀!
没错,可是如果y和(x/y)是一样的数呢?
没错,那个数就是完全平方数!
而且它的平方根必须是质数,否则就会有5个因子,7个因子,甚至更多
于是,我们再判断一下质数就可以了
单个时间复杂度:O(x)O(\sqrt{\sqrt{x}})O(x )
当然,我们可以预先筛一遍,然后用O(logn)的时间复杂度去判断
单个数时间复杂度:O(logx)O(logx)O(logx)
整体时间复杂度:O(2200000+tlogx)O(2200000 + tlogx)O(2200000+tlogx)(大常数就不省了)