2013年10月28日 星期一
[ZJ] a810. 2013高雄市能力競賽高中組 1. 倍數關係
#include<stdio.h>
#include<algorithm>
using namespace std;
#define cnt(a,b) (a/b)
long long int gcd(long long int a,long long int b){
if(a%b==0) return b;
return gcd(b,a%b);
}
long long int lcm(long long int a,long long int b){
long long int A=0,n,B=0;
if(a==b) return a;
n=a;
while(n){
A++;
n/=10;
}
n=b;
while(n){
B++;
n/=10;
}
if(A+B>=18) return 1000000000000000001LL;
return a*b/gcd(a,b);
}
int main(){
long long int n,m,x,y,add,A,B;
scanf("%lld%lld%lld%lld",&n,&m,&x,&y);
if(x<0) x*=-1;
if(y<0) y*=-1;
if(x==0 && y==0){
add=0;
if(n<=0 && m>=0) add++;
printf("%lld\n",add);
return 0;
}
if(!x && y) x=y;
if(x && !y) y=x;
if(n<=0 && m<=0) n*=-1,m*=-1;
if(n>m) swap(n,m);
if(n>=0){
A=m/x+m/y-m/(lcm(x,y));
B=n/x+n/y-n/(lcm(x,y));
if(n%x==0 || n%y==0) A++;
if(m==0) A=1;
printf("%lld\n",A-B);
}
if(n<0){
n*=-1;
A=m/x+m/y-m/(lcm(x,y));
B=n/x+n/y-n/(lcm(x,y));
printf("%lld\n",A+B+1);
}
}
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言