考虑计算 pq 秒内所有 p 的改变,因所有改变状态点均被扫到,绿灯时长自然为 \frac{p(q+1)}{2}。
对 q 的改变计算也同理,时长为 \frac{q(p+1)}{2}。
由于两数均为奇数,前 pq 秒状态与后 pq 秒相反,答案如下:
\frac{(p+1)(q+1)+(p-1)(q-1)}{2\times 2}
即:
\frac{2q(p+1)-2q+2}{4}
所以答案为:
\frac{pq+1}{2}
最后乘上 \gcd(p,q)^2 即可。
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int p,q,w;
signed main(){
cin>>p>>q;
w=__gcd(p,q);
p/=w;
q/=w;
if((p%2)&&(q%2)) cout<<w*w*((p*q+1)/2);
else cout<<w*w*(p*q)/2;
return 0;
}