快速枚举因子(约数)
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)
种长度。
。
首先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)
种长度。
相关文章推荐
- poj_1845 Sumdiv(素因子分解+快速幂+约数和+二分求等比数列和)
- UVA 11889-Benefit(数学_快速枚举因子)
- 最高科技——快速枚举约数
- hdu1215七夕节(快速求不同因子数的和)
- CC NUMFACT(Number of Factors-枚举因子)
- for in 快速枚举
- 【数论】【Polya定理】【枚举约数】【欧拉函数】【Java】poj2154 Color
- 【BZOJ4816】数字表格,反演+枚举约数
- HDU 4944 枚举公因子 求和
- 【枚举约数】Gym - 101412A - Ginkgo Numbers
- 快速枚举与NSEnumerator枚举遍历数组
- c++之枚举 快速入门及使用
- ios之快速枚举
- Objective-C边学边记-8:Foundation Kit快速教程之 数组、枚举
- Block块快速枚举
- SGU-499-枚举因子
- 【枚举约数】HackerRank - Week of Code 26 - Satisfactory Pairs
- 约数枚举与整数分解 2018-2-11
- POJ 1845 Sumdiv(因子分解+快速幂+二分求和)
- 快速枚举