描述
涟漪每天都会到工一的实验室(7楼)学习,一天去三次。工一有两部电梯,其中有一部电梯每隔x天维修一次,(维修期间,电梯一整天都不工作),另一部电梯每隔y天维修一次,如果同一天两部楼梯都在维修期间,涟漪只能爬楼梯,他想知道从第1天到第n天一共走了多少层楼梯?(设第0天两部电梯都在维修)
输入
第一行包含t组测试数据(t<=150) 每组测试输入3个数字x,y,n(0<=x<=1000 , 0<=y<=1000 , n<=1e9)
输出
输出走了多少层楼梯。
样例输入
2
1 1 2
2 3 6
样例输出
36
0
#include <stdio.h>
int main(int argc, char **argv)
{
int x,y,t,max,min,tmp,sum;
long long n;
scanf("%d", &t);
while(t--){
scanf("%d%d%lld", &x, &y, &n);
if(0 == x && 0 == y){
printf("%lld\n", 36*n);
}else if(0 == x || 0 == y){
max = x>y?x:y;
printf("%lld\n", (n/(max+1))*36);
}else{
min = x>y?y:x;
max = x>y?x:y;
min++;
max++;
tmp = 2;
sum = 1;
//最大公约数
while(tmp <= min){
//printf("%d %d %d\n", min%tmp, max%tmp,sum);
if((0 == min%tmp) && (0 == max%tmp)){
min /= tmp;
max /= tmp;
sum *= tmp;
continue;
}
tmp++;
}
//printf("%d %d %d\n", x, y,sum);
printf("%lld\n", (n/(((x+1)*(y+1))/sum)*36));
}
}
return 0;
}