当自然数 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(2≤N≤104)。
输出格式
在一行中输出题面中算式取到的不同值的个数。
输入样例
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+1−6N−10N−15N+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;
}