今天写题目时遇到的一个小问题,开始没有头绪,在仔细阅读了离散数学中的相关概念后,决定写个博客纪念一下。
原理:所有的合数都可由若干个素数因子的积构成。
什么意思呢?举个栗子:21=3*7;
现在我们的目的是计算120以内的素数个数,就是计算120以内的合数个数,然后用120减去,就可以得到了。
现在我们来计算120以内的合数个数:因为11 * 11=121,故可以推测,120以内的合数的素数因子没必要放入11,如33=3 * 11.只需要知道33可以被3整除就可以了。
所以我们推论:120以内的合数的素数因子只有2,3,5,7,接下来只需用公式计算。
|A∪B∪C∪D| = (|A|+|B|+|C|+|D|)-(|AB|+|AC|+|AD|+|BC|+|BD|+|CD|)+
(|ABC|+|ABD|+|ACD|+|BCD|)-|ABCD|
最终个数为:120-|A∪B∪C∪D|-1+4
(这里面1不是素数,所以减去,2,3,5,7之前算在了合数里面,所以要加上)
这里给出计算公式,其中A是能被2整除的数的个数
B:能被3整除的数的个数
C:能被5整除的数的个数
D:能被7整除的数的个数
AB:能被2和3同时整除的数的个数
之后以此类推,代码实现很简单,这里不再举例
想写得详细一点,废话可能过多,
如果对你有帮助,点个赞再走呗