hdu5584 LCM Walk

2024-03-02 08:48
文章标签 walk lcm hdu5584

本文主要是介绍hdu5584 LCM Walk,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 题目链接:

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5584
题意:
两个数 ( a , b ) (a,b) (a,b),经过一次操作阔以变成(a+lcm,b)或(a,b+lcm),现在给出(a,b),问经过有限次的操作(阔以是0次),能变成(aa,bb)的(a,b)有多少种?

重现赛的时候,队友写的搜索,我一直在推,他写的搜索T了,我的样例还没写出来。。。然后又过了一会儿,他优化的记下,结果就过了。。。。。。

我发现这两个好像是相等的:
g c d ( a , b ) = g c d ( a , b + l c m ) gcd(a,b)=gcd(a,b+lcm) gcd(a,b)=gcd(a,b+lcm)
因为:
假如a=kx,b=ky
上面就是 g c d ( k x , k y ) = g c d ( k x , k x y ) gcd(kx,ky)=gcd(kx,kxy) gcd(kx,ky)=gcd(kx,kxy)
很明显应该是相等的
假如说都gcd都等于d
因为lcm肯定是大于等于a,b的,所以假设给的aa,bb都是bb比较大,所以加的lcm都加在bb上

a a = a aa=a aa=a
b b = b + l c m bb=b+lcm bb=b+lcm

a a = a aa=a aa=a
b b = b + a b d bb=b+\frac{ab}{d} bb=b+dab= b ⋅ ( 1 + a d ) b\cdot (1+\frac{a}{d}) b(1+da)

所以:
a = a a a=aa a=aa
b = b b 1 + a d b=\frac{bb}{1+\frac{a}{d}} b=1+dabb(要除得尽才行)

所以根据所给的aa,bb就能找出上一次的a,b了
但是(6,8)这个样例就让把我hack了,明明只到(2,6)就阔以了啊,结果算到了(2,3),但是我发现(2,3)的gcd不等于原来的,到这里就阔以停止了

#include"bits/stdc++.h"
using namespace std;
typedef long long LL;
const int maxn=1e5+5;
const int MOD=1e9+7;
LL d;
LL dfs(LL x,LL y)
{if(x>y)swap(x,y);LL a1=-1,b1=-1;LL sum=0;if(y%(1+x/d)==0)//要除得尽才行 {a1=x,b1=y/(1+x/d);if(__gcd(a1,b1)==d){sum+=dfs(a1,b1);sum++;//这条路径上的每个点都是一种情况 }}if(__gcd(a1,b1)!=d)return 1;//如果gcd不等于原来的就直接停止了 else return sum;
}
int main()
{int T;cin>>T;for(int Case=1;Case<=T;Case++){LL x,y;cin>>x>>y;d=__gcd(x,y);cout<<"Case #"<<Case<<": "<<dfs(x,y)<<endl;}
}

这篇关于hdu5584 LCM Walk的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/765560

相关文章

[置顶]LCM性质 + 组合数 - HDU 5407 CRB and Candies

CRB and Candies Problem's Link  Mean:  给定一个数n,求LCM(C(n,0),C(n,1),C(n,2)...C(n,n))的值,(n<=1e6). analyse: 很有趣的一道数论题! 看了下网上别人的做法,什么Kummer定理我还真没听说过,仔细研究一下那个鬼定理真是涨姿势了! 然而这题我并不是用Kummer那货搞的(w

python中的os.walk()方法学习

"""os.listdir(path) 只能返回当前path路径下的文件和文件夹,不包含子目录中的内容,并且不包含路径,只是文件或文件夹名字.os.walk(path)用来遍历一个目录内各个子目录和子文件每次遍历的对象返回的都是一个三元组(root, dirs, files)root:指的是当前正在遍历的这个文件夹本身的地址,也就是walk传进去的那个目录地址dirs:是一个list,

Codeforces Round #328 (Div. 2)C. The Big Race(数学gcd lcm)

题目连接 题意:比赛时 ,居然理解错题意= =,以为两个人的速度是一样的,然后有个人的只会有一步是w米,另一个人只有一步是b米。。。。 就是一个人每一步是w,一个人每一步是b,终点后是深渊,然后长度是在1–t随机选择一个d作为赛道长度,问不能区分二人胜负的可能。 思路:就是求d%w==d%b = = #include<bits/stdc++.h>using namespace std;

[ARC050C] LCM 111 题解

一句话题解: 转化两个大数的 gcd ⁡ \gcd gcd ,再用迭代的思想求答案。 [ARC050C] LCM 111 题解 题目 题意 给你 a a a , b b b , m m m ,其中 1 ≤ A , B ≤ 1 0 18 , 2 ≤ M ≤ 1 0 9 1\le A,B\le 10^{18},2\le M\le 10^9 1≤A,B≤1018,2≤M≤109 ,让

hdu 4497 GCD and LCM(排列组合)

题目:hdu 4497 GCD and LCM 题目大意:给出三个数的最大公约数,和最小公倍数,问这三个数的排列组合关系。 解题思路:最小公倍数/最大公约数 ==  三个数不同部分的乘积。这样来考虑的话,三个数都要有最大公约数的部分,其余的部分就是由LCM / GCD 里面的因子构成。这里面的因子可能会有 2 2 3 这样的情况, 不同的因子之间是不会相互干扰的,但是相同的会出现问

UVA10791 - Minimum Sum LCM(分解质因子)

UVA10791 - Minimum Sum LCM(分解质因子) 题目链接 题目大意:给你一个N,x,y,z..(多个数)的最小公倍数是N,希望这些数的和是最小的,输出这个值(因子数至少是2)。 解题思路:将N质因子分解,这样每个数其实就是每个因子的次数方,这样和一定是最小的,因为不会有可以约掉的数。1的时候要注意一下。还要需要用long long,因为当N =2147483

python os.walk的返回值

在做复杂的路径遍历的时候,遍历的模式不好定义,只有通过递归的方式来做。 递归的实现在python中有os.walk,它将遍历的所有结果保存在一个结构中使用for循环即可,所以这个函数很有用。 唯一麻烦的是for循环有三个值,分别代表当前的遍历目录,文件夹,文件。以前一直记不住他们的顺序,今天突然灵感爆发。 使用 p, d, f 来代替,PDF是常见的文件格式,记起来比较方便。 p代表PATH

python学习之pathlib和walk

一、`pathlib` 是 Python 的一个标准库模块,它提供了一系列用于操作文件系统路径的类。`pathlib` 旨在提供一个面向对象的文件系统路径操作接口,使得路径操作更加直观和易于使用。 以下是 `pathlib` 的一些关键特性: 1. **面向对象的接口**:`pathlib` 中的 `Path` 类提供了一个面向对象的方式来处理文件系统路径。 2. **自动处理不同操作系统的

array_walk()使用

bool  array_walk (  array &$array ,  callable $callback [,  mixed $userdata = NULL ] ) 将用户自定义函数 funcname 应用到 array 数组中的每个单元。 array_walk() 不会受到 array 内部数组指针的影响。array_walk() 会遍历整个数组而不管指针的位置。 array

GCD LCM

GCD(最大公约数) 欧几里得算法(辗转相除法) 原理 if(a%b==0) GCD=b else GCD=b%(a%b) 设 a ≥ b a\ge b a≥b: 若 a m o d b = = 0 a\mod b==0 amodb==0,则 g c d ( a , b ) = = b gcd(a,b)==b gcd(a,b)==b(整除性质); 若 a m o d b ! = 0 a