Revenge of GCD HDU5019
Description
In mathematics, the greatest common divisor (gcd), also known as the greatest common factor (gcf), highest common factor (hcf), or greatest common measure (gcm), of two or more integers (when at least one of them is not zero), is the largest positive integer that divides the numbers without a remainder. ---Wikipedia
Today, GCD takes revenge on you. You have to figure out the k-th GCD of X and Y.
Input
The first line contains a single integer T, indicating the number of test cases.
Each test case only contains three integers X, Y and K.
[Technical Specification] 1. 1 <= T <= 100 2. 1 <= X, Y, K <= 1 000 000 000 000
Output
For each test case, output the k-th GCD of X and Y. If no such integer exists, output -1.
Sample Input
3 2 3 1 2 3 2 8 16 3
Sample Output
1 -1 2
________________
题意:
给出x , y 求 第k大的公约数(x,y,k <= 1e12)。
看到这题数据范围直接吓尿,一开始写了个 求最大公约数后枚举约数,意料之中的T了。
然后想到,第k大的公约数,其实就是最大公约数的第k个因子。
如果枚举最大公约数的因子,最大公约数可能有1e12那么大,显然会t.
那么可以考虑只 枚举一半的因子(因为1e12的约数最多 2* sqrt(1e12) 也就是2e6左右( 这里有点问题,我看别人有用1e6存的,我不知道我想的对不对) )
这样,可以用数组存起来,只要
for( int i = 1 ; i <=sqrt( gcd (x,y) ) ; i++)
{
if( gcd(x,y) % i == 0 )
array[cnt++] = i ;
if( gcd (x,y) / i == 0 )
array[cnt++] = gcd(x,y) / i ;
}
}
然后对这个数组排序后从大到小取就可以了。别人的代码A了自己的T了一下午。
然后又看到别人的思路
先在 1 - sqrt( gcd(x,y) ) 中找,
第n个小的约数所对应的 gcd(x,y) / n 也就是第n个大的约数。
找不到继续在
( gcd(x,y) ) - 1 区间中找 ,找到的也就是第n个大的约数 ( 这里我说不太清楚,不太好理解,大概可以理解为gcd(x,y)先找一边的约数再找另一边)
代码如下:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long int ll ;
ll gcd ( ll a , ll b )
{
if ( b == 0 ) return a ;
else
gcd(b , a % b );
}
int main()
{
int t ;
cin>> t;
for( int z = 1 ; z <= t ; z++)
{
llx,y,k;
cin>> x >> y >> k ;
llt = gcd(x,y);
llnum = 0 , v;
for( int i = 1 ; i <= sqrt(t) ;i++)
{
if( t % i == 0 )
{
num++;
v=t/i;
}
if( num == k )
break ;
}
if( num == k )
{cout<< v << endl ; continue;}
else
for( int i = sqrt(t) ; i >=1 ; i--)
{
if( i*i == t)
continue;
if( t % i == 0 )
{
num++;
v=i;
}
if( num == k)
break ;
}
if( num == k )
cout<< v << endl ;
else cout << "-1" << endl ;
}
return 0 ;
}
——————
不知道为什么T了一下午,照猫画虎对着别人思路都T,重新好几次还T。然后晚上饭后一怒之下又重写一遍莫名AC。。
![]()
Revenge of GCD HDU5019的更多相关文章
- HDOJ 5019 Revenge of GCD
Revenge of GCD In mathematics, the greatest common divisor (gcd), also known as the greatest common ...
- 数学--数论--HDU 5019 revenge of GCD
Revenge of GCD Problem Description In mathematics, the greatest common divisor (gcd), also known as ...
- HDU 5019 Revenge of GCD(数学)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5019 Problem Description In mathematics, the greatest ...
- BestCoder10 1002 Revenge of GCD(hdu 5019) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5019 题目意思:给出 X 和 Y,求出 第 K 个 X 和 Y 的最大公约数. 例如8 16,它们的公 ...
- HDU 5019 Revenge of GCD
题解:筛出约数,然后计算即可. #include <cstdio> #include <algorithm> typedef long long LL; LL a1[10000 ...
- hdu 5018 Revenge of GCD
题意: 给你两个数:X和Y .输出它们的第K大公约数.若不存在输出 -1 数据范围: 1 <= X, Y, K <= 1 000 000 000 000 思路: 它俩的公约数一定是gcd ...
- hdu 5019(第K大公约数)
Revenge of GCD Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用
OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLin ...
- iOS 多线程之GCD的使用
在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...
随机推荐
- Java synchronized 详解
Java synchronized 详解 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 1.当两个并发线程访问同一个对象object ...
- java基础知识拾遗(三)
1.类加载 bootstrap classloader -引导(也称为原始)类加载器,它负责加载Java的核心类. extension classloader -扩展类加载器,它负责加载JRE的扩展目 ...
- CALayer之mask属性-遮罩
CALayer有一个属性叫做mask. 这个属性本身就是个CALayer类型,有和其他图层一样的绘制和布局属性. 它类似于一个子图层,相对于父图层(即拥有该属性的图层)布局,但是它却不是一个普通的子图 ...
- Docker 基础 : 网络配置
大量的互联网应用服务包含多个服务组件,这往往需要多个容器之间通过网络通信进行相互配合.Docker 目前提供了映射容器端口到宿主主机和容器互联机制来为容器提供网络服务.接下来我们将讲述 Docker ...
- Transform.TransformDirection 变换方向
官方描述: JavaScript ⇒ TransformDirection(direction: Vector3): Vector3; C# ⇒ Vector3 TransformDirection( ...
- liunx服务器常见监控指标
1. CPU Utilization 英文翻译就是CPU的利用率75%以上就比较高了(也有说法是80%或者更高).有的博客上说除了这个指标外,还要结合Load Average和Context Swit ...
- SSH通过超链接传递中文参数出现乱码问题
通过超链接传递中文参数出现乱码问题 tomcat中的server.xml文件中修改如下配置: <Connector port="8080" protocol="HT ...
- windows 上搭建 sftp 服务器 --freesshd
Linux 下 sftp 默认都会安装的, Windows 就没有了.网上搜的资料发现比较好用的是 freesshd,免费版中最好用的. 1,下载:http://www.freesshd.com/?c ...
- Jersey+Spring+Maven环境搭建
第一步:创建一个Maven工程.加入Jersey.Spring.Jersey+Spring的依赖包,以及内嵌的Tomcat7插件: pom.xml文件如图所示: <project xmlns=& ...
- 转:iOS 屏幕适配,autoResizing autoLayout和sizeClass图文详解
1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...