题意
有一个边长为 N(2<=N<=10^12)的由镜子围成的等边三角形,设结点为a,b,c,从ab上取一点p,使得ap=X(1<=X<=N-1),从p水平向右发射一条神秘光线,经过若干次反射,回到p点。这条神秘光线有一个特点,他会在他走过的路径留下一条反射镜(光线会被自己走过的路线反射),求最后回到p点时,光线移动的距离
题解
我是打表找规律…
听说模拟也是正解…
我们来看正解的分析
第一次弹出距离是X,第二次变成了N-X,之后是if(a>b) a-=b;else b-=a
是不是就是辗转相减法?
然后呢听说似乎可以通过一系列边的平移,使得答案变成一个边长为n-gcd(n,x)的三角形…
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
ll gcd(ll x,ll y){
if(!y)
return x;
return gcd(y,x%y);
}
ll n,m;
int main()
{
// freopen("light.in","r",stdin);
// freopen("light.out","w",stdout);
scanf("%lld%lld",&n,&m);
ll k=n-gcd(n,m);
printf("%lld\n",k*3);
}