◆寒假练习第二场◆
A - 2 3 5 7的倍数
□话痨几句□
(不想看的可以pass)
自古A题水掉渣……这次练习又从一道水题开始,这让作者内心愉悦٩(๑>◡<๑)۶ 。嗯哼?小学奥数嘛(虽然我小学没有补奥数)。
□题目□
Description
给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数。 例如N = 10,只有1不是2 3 5 7的倍数。
Input
输入1个数N(1 <= N <= 10^18)。
Output
输出不是2 3 5 7的倍数的数共有多少。
Sample Input
10
Sample Output
1
□解析□
虽然简单,但是还是讲一下。
首先看到这数据规模,肯定不会想到去枚举。em……于是就想到(G(k)为A中k的倍数的个数):
A={1,2,3……n}→G(k)=k|n
A
=
{
1
,
2
,
3
…
…
n
}
→
G
(
k
)
=
k
|
n
所以我们先从n个数里减去2、3、5、7的倍数。但是这样会减到一些重复的(比如35),所以我们得把它加回来——G(6)、G(10)、G(14)、G(15)、G(21)、G(35)——每两个数相乘;这样又会加重复(比如60),所以要减去——G(30)、G(70)、G(42)、G(105)——每三个数相乘;还会减重复(比如2940),所以还要加上——G(210)——四个数相乘。
最后得到一个完美的式子:
n−G(2)−G(3)−G(5)−G(7)+G(6)+G(10)+G(14)+G(15)+G(21)+G(35)−G(30)−G(70)−G(42)−G(105)+G(210)
n
−
G
(
2
)
−
G
(
3
)
−
G
(
5
)
−
G
(
7
)
+
G
(
6
)
+
G
(
10
)
+
G
(
14
)
+
G
(
15
)
+
G
(
21
)
+
G
(
35
)
−
G
(
30
)
−
G
(
70
)
−
G
(
42
)
−
G
(
105
)
+
G
(
210
)
水题,啊哈?(๑╹◡╹)ノ”“”
□代码□
(可爱的小图片又来啦( ̄▽ ̄)~* Nothing means “copy”!)
The End
Thanks for reading!
-Lucky_Glass