题目链接 luogu P1072 Hankson 的趣味题 题解 啊,还是noip的题好做 额,直接推式子就好了 \(gcd(x,a_0)=a_1=gcd(\frac{x}{a_1},\frac{a_0}{a_1})\) 额....上面这个式子似乎没用,看b的 \(lcm(x,b_0)=\frac{x*b_0}{gcd(x,b_0)}=b1\) 那么\(gcd(x,b_0)=\frac{x*b_0}{b_1}\) \(gcd(\frac{b_1}{b_0},\frac{b_1}{x})=1\)…
原题链接 嗯...通过标签我们易得知,这是一道数学题(废话) 其中,题目给了这两个条件: \(gcd(x,a_0)=a_1,lcm(x,b_0)=b_1\) 所以,根据 \(gcd\) 与 \(lcm\) 的性质,我们可以得到如下结论: \(a_1|x,x|b_1\) , \({x} \over a_1\) 与 \(a_0 \over a_1\) 互质, \(b_1 \over x\) 与 \(b_1 \over b_0\) 互质. (请自行思考原因) 有了这个结论,接下来的枚举就十分简单了.直…
题面 提前知识:gcd(a/d,b/d)*d=gcd(a,b); lcm(a,b)=a*b/gcd(a,b); 那么可以比较轻松的算出:gcd(x/a1,a0/a1)==gcd(b1/b0,b1/x)==1; 那么我们求解的x仅仅从b1的因数中挑选就可以,x要符合以上条件且x%a1==0: 时间复杂度是O(sqrt(b1)*n+log(n)); #include <iostream> #include <cstring> #include <cmath> #define…
这里提供两种做法 sol 1 考虑两个数\(A,B\)和\(C=gcd(A,B),D=lcm(A,B)\)的关系 设\(S=\{2,3,5...P_n\}\)为质数集合\(p_{x,i}\)表示\(x\)的第\(i\)种质因子数量 显然\(p_{C,i}=min(p_{A,i},p_{B,i}),p_{D,i}=max(p_{A,i},p_{B,i})\) 所以对于每种质因子,考虑在\(a_0,a_1,b_0,b_1\)的出现次数,这里分别记为\(o_1,o_2,o_3,o_4\) 以下几种情况…
把 c 改成 d 下了两个点. 题目描述 已知正整数 a0,a1,b0,b1a_0,a_1,b_0,b_1a0​,a1​,b0​,b1​,设某未知正整数 xxx 满足: xxx 和 a0a_0a0​ 的最大公约数是 a1a_1a1​: xxx 和 b0b_0b0​ 的最小公倍数是 b1b_1b1​. 求满足条件的 xxx 的个数. Solution 1 考虑一个式子.∀a,b∈N∗\forall a,b\in\N^*∀a,b∈N∗ 有a×b=gcd⁡(a,b)×lcm(a,b)a\times b…
P1072 \(Hankson\)的趣味题 题目大意:已知有\(n\)组\(a0,a1,b0,b1\),求满足\((x,a0)=a1\),\([x,b0]=b1\)的\(x\)的个数. 数据范围:\(1<=n<=2,000,a0,a1,b0,a1<=2*1e9\) 用不是特别快的方法水过去的. 暴力枚举\(b1\)的约数,代入检验. 普通枚举约数复杂度\(O(\sqrt(L))\),检验的复杂度\(O(logL)\). 考虑到约数一个数\(k\)约数个数期望是\(log\)的. 所以先筛…
P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲解了如何求两个正整数 c1 和 c2 的最大公约数和最小公倍数.现在 Hankson 认为自己已经熟练地掌握了这些知识,他开始思考一个“求公约数”和“求公倍数”之类问题的“逆问题”,这个问题是这样的:已知正整数 a0,a1,b0,b1,设某未知正整数 x 满足:…
P1072 Hankson 的趣味题 输入输出样例 输入 2 41 1 96 288 95 1 37 1776 输出 6 2 PS: 通过辗转相除法的推导 import java.util.*; class Main{ public static void main(String args[]){ Scanner in = new Scanner(System.in); int n = in.nextInt(), a0, a1, b0, b1, count = 0; while(n-- > 0)…
https://www.luogu.org/problemnew/show/P1072(题目传送) 数学的推理在编程的体现越来越明显了.(本人嘀咕) 首先,我们知道这两个等式: (a0,x)=a1,[b0,x]=b1(a0,x)=a1,[b0,x]=b1 于是,我们可以设: x=a1*p,b1=x*tx=a1∗p,b1=x∗t 于是有: a1*p*t=b1a1∗p∗t=b1 所以我们令: b1/a1=sb1/a1=s 则: p*t=sp∗t=s 即: t=s/pt=s/p 又由最大公约数与最小公…
洛谷P1072:https://www.luogu.org/problemnew/show/P1072 思路 gcd(x,a0)=a1 lcm(x,b0)=b1→b0*x=b1*gcd(x,b0) (由a*b=gcd(a,b)*lcm(a,b)) x=(b1/b0)*gcd(x,b0) 令i=gcd(x,b0)∈[1,√b0] 分成两半求减少时间复杂度 特判相等的时候 判断x=(b1/b0)*i和x=(b1/b0)*(b0/i)是否满足条件 代码 #include<iostream> #inc…