大水题

先看题目:https://ac.nowcoder.com/acm/problem/15079
解题思路:
题目要求的是不是2,5,11,13的倍数,我们可以考虑是2,5,11,13的倍数有多少个,即求|2的倍数 U 5的倍数 U 11的倍数 U 13的倍数|,如果把它们直接加起来,发现会有一些元素重复统计了。(比如计算有n中有多少个2的倍数中会包含5,11,13的倍数),因此需要使用容斥原理。
容斥原理的内容是:对于任意个集合,都可列出这样一个等式,其中左边是所有集合的并的个数,右边是这些集合的“各种搭配”。每个“搭配”都是若干集合的交集,且每一项前面的正负号取决于集合的个数————奇数个集合为正,偶数个集合为负。
代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    // 2 5 11 13
    ll n;
    while(cin >> n) {
        ll sum1 = n/2 + n/5 + n/11 + n/13;
        ll sum2 = n/10 + n/22 + n/26 + n/55 + n/65 + n/143;
        ll sum3 = n/110 + n/130 + n/286 + n/715;
        ll sum4 = n/1430;
        cout << n - (sum1-sum2+sum3-sum4) << endl;
    }
}
全部评论

相关推荐

2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务