警示后人!!!70分快来看!!!

P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题

SRp1022 @ 2024-08-29 18:52:14

你应该换一个思路!!!

秒AC!!!

lcm(a, b) = a * b / gcd(a, b)

也就是说, a b = lcm(a, b) gcd(a, b)!!!(不信的话自己试试看)

所以, 在讲了一大堆废话之后, 最终的思路就是:

从x一直枚举到y(注意, 不要从1开始枚举, 否则可能会TLE), 再设一个变量a(为了方便叙述, 我们暂且先这么叫它) = x y / i(循环变量), 判断a i 是否等于x * y和gcd(a, i)是不是等于x, 如果都满足, ans++

这样子的话, 不用特判任何事(包括#9 x = y)就能轻松AC啦!!!


by lllyyyyyy @ 2024-09-20 19:59:56

woc 还真过了,大佬orz,原理是怎么回事呢,知道xy=gcd(x,y)lcm(x,y)后,后面的怎么理解呢


by SRp1022 @ 2024-09-22 16:52:48

@lllyyyyyy, 由于a b = gcd(a, b) lcm(a, b), 所以a = gcd(a, b) lcm(a, b) / b, 我们只用枚举b就可以了。在枚举的同时还要注意, gcd(a, b) lcm(a, b) / b不一定除得尽, 所以还要判断a b是否等于x(gcd(a,b))y(lcm(a, b)), 以及gcd(a, b)是否等于x。(不用判断lcm(a, b)是否等于y, 因为如果a b == x y, 又gcd(a, b) == x, a b == gcd(a, b) lcm(a, b), 所以a b == x lcm(a, b), lcm(a, b) == y)


by SRp1022 @ 2024-09-22 16:53:45

还有, 你是不是按照《深入浅出》这本书写的?


by Arthur_Coding @ 2024-09-29 21:30:08

感谢大佬,顺利解决困扰好久的问题!


by chiyuwang @ 2024-12-18 19:30:29

大佬牛orz


|