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

Output示例

1

容斥原理
 1 #include <cstdio>
 2
 3 #define LL long long
 4
 5 using namespace std;
 6
 7 LL n,tot;
 8
 9 int main()
10 {
11     scanf("%lld",&n);
12     tot=(LL)n/2+n/3+n/5+n/7;
13     tot-=(LL)(n/6+n/10+n/14+n/15+n/21+n/35);
14     tot+=(LL)n/30+n/42+n/70+n/105;
15     tot-=(LL)(n/210);
16     printf("%lld",n-tot);
17     return 0;
18 }
 
时间: 2024-09-29 16:49:35

51Nod——N1284 2 3 5 7的倍数的相关文章

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 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

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的倍数 | 容斥原理

用容斥原理求出不满足条件的个数cnt,然后用n-cnt就得到答案了. 这里不满条件的数就是能整除2,3,5,7这些数的集合并集.要计算几个集合并集的大小,我们要先将所有单个集合的大小计算出来,然后减去所有两个集合相交的部分,再加回所有三个集合相交的部分,再减去所有四个集合相交的部分,依此类推,一直计算到所有集合相交的部分. 文章推荐:http://www.cppblog.com/vici/archive/2011/09/05/155103.html #include <iostream> #i

51Nod 1433 0和5(9的倍数理论)

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1433 思路: 数论中关于9的倍数的理论:若是一个数能被9整除,则各位数之和为9的倍数. 因为这题是90的倍数,所以至少得有一个0. 分别统计0和5的个数,9个5相加的话就是9的倍数,计算出能有几个9个5,剩下的0全排最后就可以了. 1 #include<iostream> 2 #include<algorithm> 3 #include<cstrin

51nod 1616 最小集合(枚举倍数)

分析:也就是取任意多个数,它们的最大公约数都在这个集合里.考虑到ai比较小,可以枚举小于a中最大值的所有数,判断是否为其中若干个数的gcd.记c[k]为a中k的倍数的个数,然后枚举k的倍数i*k,c[i]<2直接跳过,如果c[i*k]==c[k],说明k的那些倍数也同时是i*k的倍数,k就可以不在集合中,反之,如果任意i,c[i*k]<c[k],说明存在一个倍数和其它k的倍数的gcd是k,所以k一定在集合中.两次枚举倍数,复杂度为O(nlogn). 1 #include<iostream

51nod——T1103 N的倍数

题目来源: Ural 1302 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 一个长度为N的数组A,从A中选出若干个数,使得这些数的和是N的倍数. 例如:N = 8,数组A包括:2 5 6 3 18 7 11 19,可以选2 6,因为2 + 6 = 8,是8的倍数. Input 第1行:1个数N,N为数组的长度,同时也是要求的倍数.(2 <= N <= 50000) 第2 - N + 1行:数组A的元素.(0 < A[i] <=

51NOD 1103 N的倍数(抽屉原理)

传送门 一个长度为N的数组A,从A中选出若干个数,使得这些数的和是N的倍数. 例如:N = 8,数组A包括:2 5 6 3 18 7 11 19,可以选2 6,因为2 + 6 = 8,是8的倍数. Input 第1行:1个数N,N为数组的长度,同时也是要求的倍数.(2 <= N <= 50000) 第2 - N + 1行:数组A的元素.(0 < A[i] <= 10^9) Output 如果没有符合条件的组合,输出No Solution. 第1行:1个数S表示你所选择的数的数量.