hdu 5584 LCM Walk

Posted bluefly-hrbust

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 5584 LCM Walk相关的知识,希望对你有一定的参考价值。

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

  第二个突破口是,那个式子,我们可以想一想,是不是可以把数进行拆分,我们发现

     a=x*k,b=y*k;其中k=gcd(a,b) 并且 x和y互质,这样带入式子,这样我们就把(x*k,y*k)推到了(x*k,x*y+x*y*k),化简即k *(x,(x+1)*y),gcd仍然是k,反过来,我们只需要保证,前一步,大的值满足(b>a)  b%(a+1)==0 并且 gcd(a,b)=K。不断迭代过程即可 

#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
using namespace std;
int cnt;
int gcd(int x,int y){
  return x%y==0?y:gcd(y,x%y);
}
void solve(int x,int y){
  if (x>y){
    swap(x,y);
  }
  if (y%(x+1)){
    return ;
  }else {
    cnt++;
    solve(x,y/(x+1));
  }

}
int main(){
  int t;
  int ex,ey;
  scanf("%d",&t);
  int z=0;
  while(t--){
    z++;
    cnt=1;
    scanf("%d%d",&ex,&ey);
    int x=max(ex,ey);
    int y=min(ex,ey);
    int k=gcd(ex,ey);
    x/=k;y/=k;
    solve(x,y);
    printf("Case #%d: %d
",z,cnt);
  }
  return 0;
}

 

以上是关于hdu 5584 LCM Walk的主要内容,如果未能解决你的问题,请参考以下文章

HDU - 5584 LCM Walk (数论 GCD)

hdu 5584 LCM Walk

HDU 5844 LCM Walk(数学逆推)

HDU 5407 CRB and Candies(LCM +最大素因子求逆元)

[HDU 5382] GCD?LCM!

[HDU5382]GCD?LCM!