Indivisibility——容斥原理的应用

简介: 题目描述给一个数n,找出1 ~ n 范围内不被 2 ~ 10整除的数的个数

题目描述


给一个数n,找出1 ~ n 范围内不被 2 ~ 10整除的数的个数


输入


一个数n


输出


1–n范围内不被2–10整除的数的个数


样例输入


12


样例输出


2


提示


数据范围:1<=n<=1018


2–10以内的素数有 2 3 5 7

根据容斥原理:结果应该等于n-n/2-n/3-n/5-n/7+n/6+n/10+n/14+n/15+n/21+n/35-n/30-n/42-n/70-n/105+n/210

其中—>6是2和3的乘积,10是2和5的乘积,14是2和7的乘积,15是3和5的乘积,21是3和7的乘积,35是5和7的乘积(加)

30是2,3,5的乘积,42是2 3 7的乘积,70是2 5 7的乘积,105是3 5 7 的乘积(减)

210为2 3 5 7的乘积(加)


参考代码:


#include <bits/stdc++.h>
#include <algorithm>
typedef long long ll;
using namespace std;
ll read(){ll c = getchar(),Nig = 1,x = 0;while(!isdigit(c) && c!='-')c = getchar();
if(c == '-')Nig = -1,c = getchar();
while(isdigit(c))x = ((x<<1) + (x<<3)) + (c^'0'),c = getchar();
return Nig*x;}
#define read read()
int main()
{
    ll n=read;
    cout<<n-n/2-n/3-n/5-n/7+n/6+n/10+n/14+n/15+n/21+n/35-n/30-n/42-n/70-n/105+n/210<<endl;
    return 0;
}
/**************************************************************
    Problem: 3814
    Language: C++
    Result: 正确
    Time:1 ms
    Memory:6788 kb
****************************************************************/


目录
相关文章
|
7月前
|
算法 测试技术 C++
【数学归纳法 组合数学】容斥原理
【数学归纳法 组合数学】容斥原理
一个求公约数和公倍数的有趣求法
一个求公约数和公倍数的有趣求法
64 0
|
机器学习/深度学习
卡特兰数
卡特兰数
88 0
|
算法 C语言 C++
【数论】最大公约数、约数的个数与约数之和定理
先来科普下什么是约数:当a能被b整除,我们就说b为a的约数,b的倍数为a
133 0
容斥原理 (两个例题)
容斥原理 (两个例题)
154 0
|
算法
质数筛法:朴素素数筛,埃氏筛,欧式筛
质数筛法:朴素素数筛,埃氏筛,欧式筛
157 0
|
算法 C++
容斥原理算法的实现
容斥原理算法的实现
容斥原理算法的实现