您的位置:首页 > 其它

快速枚举因子(约数)

2016-10-11 09:18 204 查看
求数n的最小的约数r,使r满足性质P,这些性质满足这样的一个条件:若有d|r满足性质P,则有r也满足P


首先O(n√)

直接暴力枚举因数显然可行,然而我们有更快的方法。

设n=pk11pk22…pkmm

我们先从大到小枚举数w1

,使其成为最小的w1使得t=pw11pk22…pkmm满足P


再枚举w2

,使其成为最小的w2使得t=pw11pw22…pkmm满足P


一直枚举,得到数t=pw11pw22…pwmm

,即为最终的答案。

正确性由性质的性质显然,不计因式分解,则总时间复杂度为O(lgn⋅P)



 

这个方法的应用暂且知道两个:

一是求原根,枚举约数时直接改为上面的方法,验证一个数的时间降为O(lg2n)



二是求字符串的最小循环节,将本来的枚举约数改为上述算法,那就只用枚举O(lgn)

种长度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: