hdu 5584 gcd/lcm/数学公式
input
T 1<=T<=1000
x y
output
有多少个起点可以走n(n>=0)步走到(x,y),只能从(x,y)走到(x,y+lcm(x,y))/(x+lcm(x,y),y)
标准解:从(x,y0)走到(x,y),则设x=ag,y0=bg,g=gcd(x,y0),有y=bg+abg=(a+1)bg,因为a,b互质,a,(a+1)互质,所以a和(a+1)b互质,所以若可以从(x,y0)走到(x,y),有gcd(x,y0)=gcd(x,y),然后将x和y中gcd(x,y)除去之后不断除以(x+1)即可
#include <iostream>
#include <cstdio>
#include <set>
#include <algorithm> using namespace std; typedef long long LL; //求最大公约数
LL gcd(LL a, LL b) { if(!b) return a; else return gcd(b,a%b); } int main()
{
int t,Case = ;
scanf("%d",&t);
while(t--)
{
LL ex,ey; //终点坐标 scanf("%lld%lld",&ex,&ey);
LL GCD = gcd(ex,ey);
ex/=GCD,ey /=GCD;
int ans = ;
while()
{
if(ey < ex) swap(ex,ey);
ans++;
if(ey % (ex+)) break;
ey /= (ex+);
} printf("Case #%d: %d\n",++Case,ans);
}
}
answer
#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <ctime>
#include <cmath>
#include <cctype>
#define MAX 100000
#define LL long long
int cas=,T,x,y,d[],dn;
void find(int x,int *d,int& dn)
{
dn=-;
int m=sqrt(x);
for(int i=;i<=m;i++) if(x%i==) d[++dn]=i;
for(int i=dn;i>=;i--) d[++dn]=x/d[i];
}
int gcd(int a,int b) { return b==?a:gcd(b,a%b); }
int main()
{
// freopen("in","r",stdin);
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&x,&y);
int step=,flag=;
while(flag&&x!=y)
{
flag=;
if(x>y) std::swap(x,y);
int g=gcd(x,y);
find(g,d,dn);
for(int i=dn;i>=;i--)
{
if(y%(d[i]+x)==)
{
int y1=y/(d[i]+x)*d[i];
if(gcd(x,y1)==d[i]) { y=y1;step++;flag=;break; }
}
}
}
printf("Case #%d: %d\n",cas++,step);
}
//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
return ;
}
My Code
hdu 5584 gcd/lcm/数学公式的更多相关文章
- 2015多校第8场 HDU 5382 GCD?LCM! 数论公式推导
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5382 题意:函数lcm(a,b):求两整数a,b的最小公倍数:函数gcd(a,b):求两整数a,b的最 ...
- hdu 5382 GCD?LCM! - 莫比乌斯反演
题目传送门 传送门I 传送门II 题目大意 设$F(n) = \sum_{i = 1}^{n}\sum_{j = 1}^{n}\left [ [i, j] + (i, j) \geqslant n \ ...
- hdu 5382 GCD?LCM!
先考虑化简f函数 发现,f函数可以写成一个递归式,化简后可以先递推求出所有f函数的值, 所以可以先求出所有S函数的值,对于询问,O(1)回答 代码: //File Name: hdu5382.cpp ...
- L - LCM Walk HDU - 5584 (数论)
题目链接: L - LCM Walk HDU - 5584 题目大意:首先是T组测试样例,然后给你x和y,这个指的是终点.然后问你有多少个起点能走到这个x和y.每一次走的规则是(m1,m2)到(m1+ ...
- 【HDU 5382】 GCD?LCM! (数论、积性函数)
GCD?LCM! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- HDU 4497 GCD and LCM(数论+容斥原理)
GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- HDU 4497 GCD and LCM 素因子分解+ gcd 和 lcm
题意: 给两个数,lll 和 ggg,为x , y , z,的最小公倍数和最大公约数,求出x , y , z 的值有多少种可能性 思路: 将x , y , z进行素因子分解 素因子的幂次 x a1 a ...
- hdu-3071 Gcd & Lcm game---质因数分解+状态压缩+线段树
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3071 题目大意: 给定一个长度为n的序列m次操作,操作的种类一共有三种 查询 L :查询一个区间的所 ...
- Mathematics:GCD & LCM Inverse(POJ 2429)
根据最大公约数和最小公倍数求原来的两个数 题目大意,不翻译了,就是上面链接的意思. 具体思路就是要根据数论来,设a和b的GCD(最大公约数)和LCM(最小公倍数),则a/GCD*b/GCD=LCM/G ...
随机推荐
- 安卓---Tabhost实现页面局部刷新--父页子页之间的传值
TabHost的实现分为两种,一个是不继承TabActivity,一个是继承自TabActivity:当然了选用继承自TabActivity的话就相对容易一些,下面来看看分别是怎样来实现的吧. 我只写 ...
- 移动app安全测试
安全方面逐渐转向app安全,服务端app安全测试基本上跟常规的web方面挖掘差不多,只是增加了一个反编译或抓包的过程. 参考文献: http://drops.wooyun.org/tips/749 h ...
- Opencv+MFC获取摄像头数据,显示在Picture控件
分为两步:OpenCV获取摄像头数据+图像在Picture上显示 第一步:OpenCV获取摄像头数据 参考:http://www.cnblogs.com/epirus/archive/2012/06/ ...
- androidstudio下载地址
google官网地址 https://developer.android.com/studio/index.html
- pro asp.net mvc5
mvc 架构的每一个部分都是定义良好和自包含的,称为关注分离.域模型和控制器逻辑与UI是松耦合的.模型中操作数据的逻辑仅包含在模型中,显示数据的逻辑仅包含在视图中,而处理用户请求和用户输入的代码仅包含 ...
- js字符串函数 [http://www.cnblogs.com/qfb620/archive/2011/07/28/2119799.html]
JS自带函数concat将两个或多个字符的文本组合起来,返回一个新的字符串.var a = "hello";var b = ",world";var c = a ...
- MongoDB高级查询用法大全
转载 http://blog.163.com/lgh_2002/blog/static/440175262012052116455/ 详见官方的手册: http://www.mongodb.org/d ...
- android 5.0 -- Palette
Palette用来从图片资源中获取颜色内容. 下面是个对颜色值使用的工具类: public class PaletteUtils { public static int getColorWithDef ...
- SolrCloud今日大纲
SolrCloud今日大纲(了解) ● 分布式集群系统基本概念 ● SolrCloud入门 ● SolrCloud搭建 ******************************* ...
- JS面向对象基础1
根据之前看了面向对象相关的视频,按照自己的理解,整理出相关的笔记,以便自己的深入理解. 如果要判断两个数是否相等,将值乘以10或者100,转换成整数再进行比较 例如:a++与++a 短路运算符 ...