求解1-n中不是5也不是6也不是8的倍数的个数
2022/4/17 23:18:21
本文主要是介绍求解1-n中不是5也不是6也不是8的倍数的个数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、解法1
硬推公式:得到公式为n - (n / 5 + n / 6 + n / 8 - n / 30 - n / 40 - n / 24 + n /120)
代码实现:
1 #include <iostream> 2 #include <queue> 3 #include <vector> 4 #include <cstring> 5 #include <string> 6 #include <map> 7 #include <cmath> 8 #include <algorithm> 9 #include <set> 10 #include <stack> 11 #include <cstdio> 12 #include <climits> 13 #define PII pair<int,int> 14 #define rep(i,z,n) for(int i = z;i <= n; i++) 15 #define per(i,n,z) for(int i = n;i >= z; i--) 16 #define ll long long 17 #define db double 18 #define vi vector<int> 19 #define debug(x) cerr << "!!!" << x << endl; 20 using namespace std; 21 inline ll read() 22 { 23 ll s,r; 24 r = 1; 25 s = 0; 26 char ch = getchar(); 27 while(ch < '0' || ch > '9'){ 28 if(ch == '-') 29 r = -1; 30 ch = getchar(); 31 } 32 while(ch >= '0' && ch <= '9'){ 33 s = (s << 1) + (s << 3) + (ch ^ 48); 34 ch = getchar(); 35 } 36 return s * r; 37 } 38 inline void write(ll x) 39 { 40 if(x < 0) putchar('-'),x = -x; 41 if(x > 9) write(x / 10); 42 putchar(x % 10 + '0'); 43 } 44 int main() 45 { 46 ll n; 47 cin >> n; 48 cout << n - (n / 5 + n / 6 + n / 8 - n / 30 - n / 40 - n / 24 + n / 120) << endl; 49 return 0; 50 }
二、借助韦恩图观察
三个圈代表5 和 6 和 8的倍数的数
首先我们求是5的倍数就是n/5
然后就是6的倍数就是n/6
然后就是8的倍数就是n/8
我们会发现多加了重复的部分(彩色部分)
也就是5和6的中间,5和8的中间,6和8的中间
然后就是减去n/30(30是5和6的最小公倍数)
然后就是减去n/24 (24是6和8的最小公倍数)
然后就是减去n/40(40就是5和8的最小公倍数)
我们发现会多减了5 和 6 和 8中间的一部分(蓝色部分)
那我们就要加回来就是n/(120)(120是5和6和8的最小公倍数)
代码实现如上
这篇关于求解1-n中不是5也不是6也不是8的倍数的个数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南