1 条题解

  • 0
    @ 2026-4-29 20:29:00

    题面

    思路

    首先 gcd(a,b)=g\gcd(a,b)=g,那 a,ba,b 肯定都得是 gg 的倍数。

    a=xg,b=yga=xg,b=ygx<yx<yxxyy 互质。我们求出 x,yx,y 的值就可以了。

    题目中的 RR 是个新定义的函数,那就先来研究一下它的性质。

    R(i,j)=R(ji,i)R(i,j)=R(\lfloor \frac{j}{i}\rfloor,i)

    R(a,b)=hR(a,b)=h,那么递归的最后一层是 R(h,1)R(h,1)

    倒数第二层应该是 R([h,2h),h)R([h,2h),h),再往上是 R(h,[h2,2h2))R(h,[h^2,2h^2))

    所以对于任意正整数 ii,都有 R(h,[hi,2hi))=hR(h,[h^i,2h^i))=h

    结合以上两点:R(a,b)=R(xg,yg)=R(yx,xg)R(a,b)=R(xg,yg)=R(\lfloor \frac{y}{x}\rfloor,xg)

    我们想得到一个最小的可行解,所以考虑最小的可行 xx 怎么求。

    $x \in [\lfloor \frac{h^i}{g}\rfloor , \lfloor \frac{2h^i}{g}\rfloor)$,想要最小解,那就让 x=kigx= \lceil \frac{k^i}{g} \rceil 就好。

    至于 yy,它需要满足 yx=h\lfloor \frac{y}{x}\rfloor=h 且与 xx 互质。满足条件的 yy 可以是 x×h+1x\times h+1

    注意:xx 不能为 11

    代码

    #include <cstdio>
    long long T,G,H,A,B;
    void solve(long long g,long long h)
    {
    	long long now=1;
    	while(now<=g)
    		now*=h;
    	A=(now-1)/G+1;
    	B=A*h+1;
    }
    int main()
    {
    	scanf("%lld",&T);
    	while(T--)
    	{
    		scanf("%lld%lld",&G,&H);
    		solve(G,H);
    		printf("%lld %lld\n",A*G,B*G);
    	}
    }
    
    • 1

    信息

    ID
    10853
    时间
    1000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    5
    已通过
    2
    上传者