#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<math.h>
#include<iostream>
#include<string>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<bitset>
#include<algorithm>
#include<time.h>
using namespace std;
void fre(){freopen("c://test//input.in","r",stdin);freopen("c://test//output.out","w",stdout);}
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,y,sizeof(x))
#define MP(x,y) make_pair(x,y)
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned long long UL;
typedef unsigned int UI;
template <class T> inline void gmax(T &a,T b){if(b>a)a=b;}
template <class T> inline void gmin(T &a,T b){if(b<a)a=b;}
const int N=0,M=0,Z=1e9+7,ms63=1061109567;
LL l,a,b;
LL x;
LL gcd(LL x,LL y)
{
return y==0?x:gcd(y,x%y);
}
int main()
{
while(~scanf("%lld%lld%lld",&l,&a,&b))
{
LL g=gcd(a,b);
double lcm_=a/g*(double)b;
if(lcm_>6e18)x=min(l,min(a,b)-1);
else
{
LL lcm=a/g*b;
LL num=l/lcm;
x=num*min(a,b);
LL top=num*lcm;
LL over=l-top;
x+=min(over,min(a,b)-1);
}
g=gcd(x,l);
printf("%lld/%lld\n",x/g,l/g);
}
return 0;
}
/*
【题意】
有两个机器人A与B赛跑。
两个机器人的均速都为1m/s
然而第一个机器人是每隔a时间单位前进a米,
第二个机器人是每隔b时间单位前进b米。
我们的比赛距离是[1,l]之间的正整数
1<=l,a,b<=5e18
现在问你,对于这[1,l]共计l个比赛距离中,两个人不打成平手的概率是多少
【类型】
讨论
lcm
【分析】
首先,对于lcm(a,b)和其倍数,这些multiple位置上,两只机器人一定是打平的。
对于每个multiple+[0,min(a,b)-1]的位置上,两只机器人也一定是打平的。
于是我们就求合法范围内所有multiple+[0,min(a,b)-1]的格点数即可。
然而要注意
1,lcm可能求出会爆int,这种情况下认为只有一个multiple
2,对于最大的一个multiple,multiple+[0,min(a,b)-1]要保证不溢出l的范围
【时间复杂度&&优化】
Olog(l)
【数据】
123456789012345679 123456789012345679 123456789012345678
6 1 7
*/