http://acm.nyist.net/JudgeOnline/problem.php?pid=993
#include<stdio.h>
#include<string.h>
/*
辗转相除法原理:
两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。
当余数为0时,较小数与余数0的最大公约数为其本身
另:余数绝对小于较小数
*/
int gcd(int m1,int m2)
{
int max,min;
max=m1>m2?m1:m2;
min=m1<m2?m1:m2;
int r=max%min;
while(r)
{
max=min;
min=r;
r=max%min;
}
return min;
}
int main()
{
long long n;
int m1,m2;
while(~scanf("%lld%d%d",&n,&m1,&m2))
{
n--;
printf("%lld\n",n/m1+n/m2-n/(m1*m2/gcd(m1,m2)));
}
}
/*
64位整型的定义方式:
long long/__int64
输出到标准输出方式有:
printf("%lld",a);
printf("%I64d",a);
cout<<a;
*/