1087 有多少不同的值 (20分)-PAT乙级真题

当自然数 n n n依次取 1 , 2 , 3 , . . . , N 1,2,3,...,N 1,2,3,...,N时,算式 ⌊ n / 2 ⌋ + ⌊ n / 3 ⌋ + ⌊ n / 5 ⌋ ⌊n/2⌋+⌊n/3⌋+⌊n/5⌋ n/2+n/3+n/5有多少个不同的值?(注: ⌊ x ⌋ ⌊x⌋ x为取整函数,表示不超过 x x x的最大自然数,即 x x x的整数部分。)

输入格式

输入给出一个正整数 N ( 2 ≤ N ≤ 10 ​ 4 ) N(2≤N≤10​^4) N(2N104)

输出格式

在一行中输出题面中算式取到的不同值的个数。

输入样例

2017

输出样例

1480

分析

正常情况下,随着 n n n增加1,算式会增加1或者0;当 n n n是6/10/15的整数倍的时候,算式会增加2(缺失1个数字);当 n n n是30的整数倍的时候,算式会增加3(缺失2个数字)。

因此要计算不同值的个数,只需要计算最后一个数字代入的结果+1(+1是因为有0的存在),再减去缺失的数字个数即可(30的整数倍不减反加是因为30是6,10,15的最小公倍数,已经被减了3次,因此需要加1次来弥补)。

a n s = N 2 + N 3 + N 5 + 1 − N 6 − N 10 − N 15 + N 30 ans = \frac{N}{2}+\frac{N}{3}+\frac{N}{5}+1-\frac{N}{6}-\frac{N}{10}-\frac{N}{15}+\frac{N}{30} ans=2N+3N+5N+16N10N15N+30N

AC代码

#include <iostream>
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d",n/2+n/3+n/5+1-n/6-n/10-n/15+n/30);
    return 0;
}

原题地址

1087 有多少不同的值 (20分)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值