【模拟算法】 ◆寒假练习第二场◆ A - 2 3 5 7的倍数

◆寒假练习第二场◆

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,3n}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)——四个数相乘。
最后得到一个完美的式子:
nG(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值