• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
村雨sup
自己选的路,跪着也要走完 XD
博客园    首页    新随笔    联系   管理    订阅  订阅
nyoj993——容斥

How many integers can you find

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
 
描述

给你三个数,n,m1,m2,找出所有小于n的能被m1或m2整除的数的个数。

 
输入
输入包含多组测试数据,每组数据占一行。
0<n<2^31,0<m1,m2<=10。
输出
每组数据输出占一行。
样例输入
12 2 3
样例输出
7
来源
爱生活
上传者
TCM_张鹏

 

#include <bits/stdc++.h>
using namespace std;
typedef long long  ll;
const int INF = 0x3f3f3f3f;
const int maxn = 2000;
const int moder = 1000000007;

int gcd(int a,int b)
{
    if(b == 0) return a;
    return gcd(b,a%b);
}


int main()
{
    int n,m1,m2;
    while(~scanf("%d%d%d",&n,&m1,&m2)){
        int m3 = m1*m2/gcd(m1,m2);
        int a,b,c;
        if(n%m1 == 0)
            a = n/m1-1;
        else
            a = n/m1;
        if(n%m2 == 0)
            b = n/m2-1;
        else
            b = n/m2;
        if(n%m3 == 0)
            c = n/m3-1;
        else
            c = n/m3;
        printf("%d\n",a+b-c);
    }
    return 0;
}

——注意的是,题目中说的是小于n,没有等于,容斥公式是把最后一个算进去的,所以要减一,细节要注意,wa了一发。

posted on 2018-03-01 22:48  村雨sup  阅读(117)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3