题目:https://www.luogu.org/problemnew/show/P1072 思路是把每个数质因数分解,答案对于每个质因数的次数有选择的区间,通过这个计算. 指数的限制就是上限是b1,下限是a1:a0-a1后有剩余的自己不能有:b1-b0有剩余的自己不能剩(即必须满上限). 分解质因数用了那个好像是 O( n^(1/4) ) 的方法.其实如果给的都是大质数是不是会被卡? 然后写了无比冗长的代码. #include<iostream> #include<cstdio>…
https://www.luogu.org/problemnew/show/P1072 一开始看了一看居然还想放弃了的. 把 \(x,a_0,a_1,b_0,b_1\) 质因数分解. 例如 \(x=p_1^{\alpha_1}p_2^{\alpha_2}...p_k^{\alpha_k}\) 由gcd的性质,对应指数的最小值,直接得一组方程. 再有lcm的性质,对应指数的最大值,再得一组方程. 设计起来不难但是写起来就慢多bug的. 第一次交70分,原因是质因数分解过慢! 应该一开始记录原本待分…
题目:https://www.luogu.org/problemnew/show/P1072 满足条件的数 x 一定是 a1 的倍数,b1 的因数,a0/a1 与 x/a1 互质,b1/b0 与 b1/x 互质: 按质因子来看,满足要求的数 x 的某个质因子 pi 的次数应该: 1.大于等于 a1 的,小于等于 b1 的: 2.如果 a0/a1 有 pi 剩余,则 x 的 pi 的次数只能是 a1 的 pi 的次数(无选择余地,不贡献答案): 3.如果 b1/b0 有 pi 剩余,则 x 的 p…
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)…
洛谷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…
方法就是枚举,根据b0和b1可以大大减小枚举范围,方法类似这个http://blog.csdn.net/hehe_54321/article/details/76021615 将b0和b1都分解质因数.记b0的某一质因数x的指数为a,b1中x的指数为b.如果a>b,那么显然对于这组b0和b1不可能有答案:如果a=b,那么ans中的x的指数可以为0到a的任意一个数:如果a<b,那么ans中x的指数只能为b. 举例: $$\begin{array}{l|l}b0=37 & b1=1776…
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 又由最大公约数与最小公…
这是个NOIP原题... 题意: 给定 a b c d 求 gcd(a, x) = b && lcm(c, x) = d 的x的个数. 可以发现一个朴素算法是从b到d枚举,期望得分50分. (为什么lyd大佬的暴力就是90...) 有个要点就是所求的x必定为d的约数. 然后根据lcm和gcd的性质,拆成质因数. x的每个质因数个数是有范围的,可以求出来. 然后乘起来就行了. 注意要分类讨论,别用书上写的,有毒. #include <cstdio> ; int p[N], top…