求n个数中与某一个元素互质的整数个数

对于求取小于 n 的数里面与 n 互素的整数个数,euler已经给出了 ϕ(n) ,这里简单总结一下对于连续区间与离散区间的求法

连续区间[a,b]

求这个区间中与 n 互素的整数个数
分解因子

n=ki=0prii

用容斥原理求解出与他不互素的元素个数

例题

参见我的另一篇blog
HDU 1695 GCD(phi函数+容斥)

离散区间

求一个集合 set{ai}ai1e6 但是 ai 是不连续的情况,我们也可以用同样的方式求,不过对于每一个数的因子组合如果暴力求解不互素的个数的话时间上肯定是承受不了的,一种方式是对于每一个因子用的倍数用 map 存起来,这样对于 1e6 的数据是没有问题的,

这里推荐另外一种方式
对于区间 [1,1e6] 先用筛法把每一个元素的倍数筛出来,这样只需要 O(nlg(n)

例题

HDU 5072 coprime (同色三角形 + 容斥)

你可能感兴趣的:(算法&数据结构,素数个数,筛法,数论)