How many integers can you find
时间限制:1000 ms | 内存限制:65535 KB
难度:1
- 描述
给你三个数,n,m1,m2,找出所有小于n的能被m1或m2整除的数的个数。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int maxn = ;
const int moder = ; int gcd(int a,int b)
{
if(b == ) 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 == )
a = n/m1-;
else
a = n/m1;
if(n%m2 == )
b = n/m2-;
else
b = n/m2;
if(n%m3 == )
c = n/m3-;
else
c = n/m3;
printf("%d\n",a+b-c);
}
return ;
}
——注意的是,题目中说的是小于n,没有等于,容斥公式是把最后一个算进去的,所以要减一,细节要注意,wa了一发。