【题解】[COCI2020-2021#2] Euklid

构造题。
来看这个东东:如果 h k ≤ b < h k + 1 h^k\leq b< h^{k+1} hkb<hk+1 , 那么 R ( b , h ) = h R(b, h) = h R(b,h)=h
构造这个东东:
b = g ⌈ h k g ⌉ a = h b + g b=g\lceil\frac{h^k}{g}\rceil \\ a=hb+g b=gghka=hb+g

其中 k k k 是 满足 h k > g h^k>g hk>g 的最小正整数。我们知道 g < h k ≤ b ≤ g ( h k g + 1 ) = h k + g < h k + 1 g<h^k\leq b\leq g(\frac{h^k}{g}+1)=h^k+g<h^{k+1} g<hkbg(ghk+1)=hk+g<hk+1 ( h ≥ 2 ) (h\geq 2) (h2)

我们有:

  1. g c d ( a , b ) = g c d ( h b + g , b ) = g c d ( g , b ) = g gcd(a,b)=gcd(hb+g,b)=gcd(g,b)=g gcd(a,b)=gcd(hb+g,b)=gcd(g,b)=g
  2. R ( a , b ) = R ( h b + g , b ) = R ( h , b ) = R ( b , h ) = h R(a,b)=R(hb+g,b)=R(h,b)=R(b,h)=h R(a,b)=R(hb+g,b)=R(h,b)=R(b,h)=h

根据 h k ≤ b < h k + 1 h^k\leq b< h^{k+1} hkb<hk+1 ,所以在经过 k k k 次后会成为 1 1 1

#include<bits/stdc++.h> #define ll long long using namespace std; ll g,h; int main() { int T; scanf("%d",&T); while(T--) { scanf("%d%d",&g,&h); ll mul=h; while(mul<=g) mul*=h; ll a,b; printf("%lld %lld\n",a=h*b+g,b=((mul-1)/g+1)*g); } }

__EOF__

本文作者仰望星空的蚂蚁
本文链接https://www.cnblogs.com/cqbzly/p/17530282.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   仰望星空的蚂蚁  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示