题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5584

给一个坐标(ex, ey),问是由哪几个点走过来的。走的规则是x或者y加上他们的最小公倍数lcm(x, y)。

考虑(ex, ey)是由其他点走过来的,不妨设当走到(x,y)时候,gcd(x, y)=k,x=k*m1, y=k*m2。

下一步有可能是(x, y+x*y/gcd(x, y))或者是(x+x*y/gcd(x,y), y)。

用k和m1,m2来表示为(k*m1, k*m2+m1*m2*k)=(k*m1, k*m2*(m1+1)), 或(k*m1+m1*m2*k, k*m2)=(k*m1*(m2+1), k*m2)。

下面只关注(k*m1*(m2+1), k*m2)。m1和m2互质并且(m2+1)与m2也互质。

那么gcd(k*m1*(m2+1), k*m2)=k,即无论如何变化,它们的最大公因数都是k。这也证明了路径唯一,我们求的是可能的起点位置数,所以直接考虑每次都是x来加的情况(即y>x的时候,交换x,y)。我们可以从(ex, ey)上逆推回去。x'=k1*m1/(m2+1),当x不是(y + k)的整数倍以后,即x/(k*(m2+1))不为0结束。

 #include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <climits>
#include <complex>
#include <fstream>
#include <cassert>
#include <cstdio>
#include <bitset>
#include <vector>
#include <deque>
#include <queue>
#include <stack>
#include <ctime>
#include <set>
#include <map>
#include <cmath> using namespace std; int ex, ey; int main() {
// freopen("in", "r", stdin);
int T, _ = ;
scanf("%d", &T);
while(T--) {
scanf("%d %d", &ex, &ey);
int k = __gcd(ex, ey);
if(ex < ey) swap(ex, ey);
int ans = ;
while() {
if(ex % (ey + k) != ) break;
ans++;
ex = ex / (ey / k + );
if(ex < ey) swap(ex, ey);
k = __gcd(ex, ey);
}
printf("Case #%d: %d\n", _++, ans);
}
return ;
}

[HDOJ5584]LCM Walk(数论,规律)的更多相关文章

  1. HDU5584 LCM Walk 数论

    LCM Walk Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  2. hdu-5584 LCM Walk(数论)

    题目链接:LCM Walk Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others)To ...

  3. L - LCM Walk HDU - 5584 (数论)

    题目链接: L - LCM Walk HDU - 5584 题目大意:首先是T组测试样例,然后给你x和y,这个指的是终点.然后问你有多少个起点能走到这个x和y.每一次走的规则是(m1,m2)到(m1+ ...

  4. HDU 5584 LCM Walk 数学

    LCM Walk Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5584 ...

  5. hdu 5584 LCM Walk(数学推导公式,规律)

    Problem Description A frog has just learned some number theory, and can't wait to show his ability t ...

  6. HDU - 5584 LCM Walk (数论 GCD)

    A frog has just learned some number theory, and can't wait to show his ability to his girlfriend. No ...

  7. HDU 5584 LCM Walk(数学题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5584 题意:(x, y)经过一次操作可以变成(x+z, y)或(x, y+z)现在给你个点(ex, e ...

  8. hdu 5584 LCM Walk

    没用运用好式子...想想其实很简单,首先应该分析,由于每次加一个LCM是大于等于其中任何一个数的,那么我LCM加在哪个数上面,那个数就是会变成大的,这样想,我们就知道,每个(x,y)对应就一种情况. ...

  9. 【HDU 5382】 GCD?LCM! (数论、积性函数)

    GCD?LCM! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

随机推荐

  1. √新技能Get - 教你发空白朋友圈

    今天下午都被空白朋友圈刷屏了.空白朋友圈也即是在朋友圈里面发空消息,没有图片也没有文字,朋友圈动态是空空的.这是谁在恶搞呢?怎么实现呢? 怎么发空消息啊?其实这是为了帮助大家识别身边用iOS的小伙伴的 ...

  2. 【linux】打印字符串中指定行

    只打印第10行 关键在于当行数小于10时不输出. 用 head tail的关键问题是当行数小于10的时候用 head -n 10 只会打出前面的行,再用tail就错了. 所以要知道源文件一共有多少行. ...

  3. C#文件输入输出流

    从输入流中读取数据(行读取字符串) using System; using System.Collections.Generic; using System.Linq; using System.Te ...

  4. ruby 学习 -- Array --2

    定义: [1, 2, 3] # An array that holds three Fixnum objects [-10...0, 0..10,] # An array of two ranges; ...

  5. 怎样查看Tomcat动态控制台信息

    在web项目调试期间,时常需要查看输出的调试信息,例如当hibernate设置为显示SQL语句时,每次运行的SQL语句会输出到终端,另外有时需要在代码中插入一些输出语句,以方便掌握运行情况,但当插入S ...

  6. iOS开发--验证码

    第一步,拖两个空间textfiled和button到storyboard上的viewcontroller上. 第二步,拖线,链接到.h文件中代码如下: 1 @property (weak, nonat ...

  7. MDK5.01百度云下载,安装微软雅黑混合字体,字体效果很棒,解决显示中文的BUG

    微软雅黑字体http://pan.baidu.com/s/1nt9Epuh 初步尝试,以前的小BUG都已经解决了.下面是安装雅黑字体后的字体效果,很爽.第一步:安装雅黑字体.第二步:选择Edit--- ...

  8. nasm fasm yasm 还是masm、gas

    留个爪,稍后学习 选择编译器nasm?fasm?yasm?还是masm.gas或其他? 前面三个是免费开源的汇编编译器,总体上来讲都使用Intel的语法.yasm是在nasm的基础上开发的,与nasm ...

  9. Struts2笔记——与ServletAPI解耦

    与ServletAPI解耦的访问方式 为了避免与 Servlet API 耦合在一起, 方便 Action 做单元测试, Struts2 对 HttpServletRequest, HttpSessi ...

  10. iOS & Mac 调试命令(VMMap&Top)

    vmmap & top命令解析内存 Is there any way to query the address space of a process on Mac? On Windows, w ...