51nod 1284 2 3 5 7的倍数 | 容斥原理

用容斥原理求出不满足条件的个数cnt,然后用n-cnt就得到答案了。

这里不满条件的数就是能整除2,3,5,7这些数的集合并集。要计算几个集合并集的大小,我们要先将所有单个集合的大小计算出来,然后减去所有两个集合相交的部分,再加回所有三个集合相交的部分,再减去所有四个集合相交的部分,依此类推,一直计算到所有集合相交的部分。

文章推荐:http://www.cppblog.com/vici/archive/2011/09/05/155103.html

#include <iostream>
#include<bits/stdc++.h>

using namespace std;

int main()
{
    long long n,ans;
    scanf("%lld",&n);
    ans=n;
    ans-=(n/2+n/3+n/5+n/7);
    ans+=(n/6+n/10+n/14+n/15+n/21+n/35);
    ans-=(n/30+n/42+n/70+n/105);
    ans+=(n/210);
    cout<<ans<<endl;
}
时间: 2024-10-11 19:38:46

51nod 1284 2 3 5 7的倍数 | 容斥原理的相关文章

51-nod -1284 2 3 5 7的倍数

1284 . 2 3 5 7的倍数 基准时间限制:1 秒 空间限制:65536 KB 分值: 5 给出一个数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的倍数的数共有多少. Input 示例 10 Output 示例 1 由于n很大,直接枚举不可行,但是用容斥定理可以很快出解. 容斥是高中数学里的知识,就是说有时候直接计算某些东西不好算

51nod 1284 2 3 5 7的倍数

给出一个数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的倍数的数共有多少. Input示例 10 Output示例 1 一开始想暴力打表,但是范围太大,看了解题思路是使用容斥原理. 讲解容斥原理的博客:http://www.cppblog.com/vici/archive/2011/09/05/155103.html #include

51nod 1284:2 3 5 7的倍数 容斥原理

1284 2 3 5 7的倍数 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给出一个数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的倍数的数共有多少. Input示例 10 Output示例 1 容斥原理的描述如下: 要计算几个集合并集的大小,我们要先将单个集合的大小计算出来,然后减

1090 3个数和为0 1091 线段的重叠 1182 完美字符串 1283 最小周长 1284 2 3 5 7的倍数

1090 3个数和为0 给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从中找出所有和 = 0的3个数的组合.如果没有这样的组合,输出No Solution.如果有多个,按照3个数中最小的数从小到大排序,如果最小的数相等则按照第二小的数排序. Input 第1行,1个数N,N为数组的长度(0 <= N <= 1000) 第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9) Output 如果没有符合条件的组合,输出No Solu

51Nod——N1284 2 3 5 7的倍数

https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1284 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给出一个数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的倍数的数共有多少. Input示例 10 Out

1284 2 3 5 7的倍数

分析: 此题是典型的容斥原理题,一开始理解错误,写成了丑数题,反正一直超时,后来才发现: 要求不是2,3,5,7的倍数的个数,可以先求出2,3,5,7的个数,之后通过n减去2,3,5,7的倍数的个数可求得不是2,3,5,7的倍数的个数: 而要知道2,3,5,7的倍数的个数,只需要分别知道2的倍数个数,3的倍数个数,5的倍数个数,7的倍数的个数,之后通过容斥原理(先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这

51Nod 1109 01组成的N的倍数

1109 01组成的N的倍数 准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 给定一个自然数N,找出一个M,使得M > 0且M是N的倍数,并且M的10进制表示只包含0或1.求最小的M. 例如:N = 4,M = 100. Input 输入1个数N.(1 <= N <= 10^6) Output 输出符合条件的最小的M. Input示例 4 Output示例 100 找一个数,应该就是搜索 一开始 我写了priority_queue 但是他

POJ 1426 Find The Multiple &amp;amp;&amp;amp; 51nod 1109 01组成的N的倍数 (BFS + 同余模定理)

Find The Multiple Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21436   Accepted: 8775   Special Judge Description Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains

鸽巢原理和容斥原理

鸽巢原理又名抽屉原理 一种简单的表述法为: 若有n个笼子和n+1只鸽子,所有的鸽子都被关在鸽笼里,那么至少有一个笼子有至少2只鸽子. 另一种为: 若有n个笼子和kn+1只鸽子,所有的鸽子都被关在鸽笼里,那么至少有一个笼子有至少k+1只鸽子. 例子: 盒子里有10只黑袜子.12只蓝袜子,你需要拿一对同色的出来.假设你总共只能拿一次,只要3只就可以拿到相同颜色的袜子,因为颜色只有两种(鸽巢只有两个),而三只袜子(三只鸽子),从而得到“拿3只袜子出来,就能保证有一双同色”的结论. 有n个人(至少2人)