51Nod 2409 启蒙练习-倍数的个数 刷题笔记

1. 题目描述

1.1. Limit

Time Limit: 1000 ms

Memory Limit: 131072 kB

1.2. Problem Description

读入 N N N,求出 1.. N 1..N 1..N的范围内所有 2 2 2 3 3 3 5 5 5的倍数一共有多少个?


1.3. Input

输入一个数 N N N


1.4. Output

输出一个数,表示这样的数的个数


1.5. Sample Input

10

1.6. Sample Output

8

1.7. Source

51Nod 2409 启蒙练习-倍数的个数


2. 解读

找出 [ 1 , n ] [1, n] [1,n]范围内 2 、 3 、 5 2、3、5 235的倍数,为去除重复计数,减去他们两两组合构成的共同的倍数,即 [ 1 , n ] [1, n] [1,n]范围内 6 、 10 、 15 6、10、15 61015的倍数。

因为减去了两两组合的倍数,三个数字相乘的倍数,即 30 30 30的倍数被减掉了,所以再加上 30 30 30的倍数,即可得出答案。

3. 代码

#include <iostream>
using namespace std;

int main()
{
    long long n;
    // 读入n
    scanf("%lld", &n);
    // 找出[1, n]范围内2、3、5的倍数
    long long nDivBy2 = n / 2l;
    long long nDivBy3 = n / 3l;
    long long nDivBy5 = n / 5l;
    // 找出[1, n]范围内6、10、15、30的倍数
    long long nDivBy6 = n / 6l;
    long long nDivBy10 = n / 10l;
    long long nDivBy15 = n / 15l;
    long long nDivBy30 = n / 30l;

    long long ans = nDivBy2 + nDivBy3 + nDivBy5 - nDivBy6 - nDivBy10 - nDivBy15 + nDivBy30;
    // 输出
    printf("%lld\n", ans);
}


联系邮箱:curren_wong@163.com

Github:https://github.com/CurrenWong

欢迎转载/Star/Fork,有问题欢迎通过邮箱交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值