题目大意:给定两个数,求
到
的所有数中,所有素因子都大于m的数的个数,答案模以
。
题解:
个人的解法1:
反过来计算存在素因子小于等于m的数的个数,假设小于m的素数有k个,
那么,就是小于等于
的数中包含素因子
的数的个数,
就是同时包含素因子a1和a2的数的个数,那么根据容斥原理,我们可以这样计算
奇数个素因子的组合就加,偶数个素因子的组合就减,就能计算出答案。
暴力枚举所有组合情况显然复杂度太高,接下来才是解决问题的关键,如何计算这个值?
我个人的方法,通过递推求解,我们从前往后求,假设我们已经求得了前个素数的结果为
,
现在第个数加入进来,那么我们首先加上
,第i+1个素数和其它素数的组合怎么计算了,只需要减去
即可,即
的每一项除以
,但是符号要改变,所以前面加个减号。
所以我们可以得到