给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数。 例如N = 10,只有1不是2 3 5 7的倍数。
输入
输入1个数N(1 <= N <= 10^18)。
输出
输出不是2 3 5 7的倍数的数共有多少。
输入样例
10
输出样例
1
思路
先求被2,3,5,7整除的数的个数,然后拿总数减去即可。下面的代码先求被其中一个数整除的数,但是这样会重复计数(因为有的同时被两个整除),所以再删去被其中两个整除的数,这样又重复删去(因为有的同时被三个整除),所以这个公式是交错加减的。
代码
n = int(raw_input())
t = 0
t += n / 2
t += n / 3
t += n / 5
t += n / 7
t -= n / 2 / 3
t -= n / 2 / 5
t -= n / 2 / 7
t -= n / 3 / 5
t -= n / 3 / 7
t -= n / 5 / 7
t += n / 2 / 3 / 5
t += n / 2 / 3 / 7
t += n / 2 / 5 / 7
t += n / 3 / 5 / 7
t -= n / 2 / 3 / 5 / 7
print n - t