HDOJ-5019-Revenge of GCD 解题报告
来源:互联网 发布:visio画数据流程图 编辑:程序博客网 时间:2024/05/18 02:17
求k大GCD。题意:给三个正整数x,y和k,求x和y的第k大公约数。
我的解题思路:首先根据求最大公约数的原理,k大公约数是最大公约数的因子。那么求k大公约数就转换成为了求最大公约数的第k大因子。可以通过唯一分解定理得到最大公约数的因子个数,然后根据情况判断是否枚举。
我的解题代码:
#include <cstdio>#include <cstdlib>#include <cstring>#include <cctype>#include <cmath>#include <algorithm>using namespace std;typedef long long Long;Long x, y, k;Long Gcd(Long a, Long b);Long Factor(Long x); //返回因子个数int main(){ int t; scanf("%d", &t); while (t--) { scanf("%lld %lld %lld", &x, &y, &k); Long gcd = Gcd(x, y); Long fn = Factor(gcd); if (fn < k) puts("-1"); else if (k == fn) puts("1"); else if (k == 1) printf("%lld\n", gcd); else if (fn % 2 == 1 && (fn - 1) / 2 == k) printf("%lld\n", (Long)sqrt(gcd + 0.5)); else { Long cnt = (Long)sqrt(gcd + 0.5) + 1; Long times = 0; for (Long i=1; i<cnt; ++i) { if (gcd % i == 0) { times++; if (k == times || k == fn - times + 1) { printf("%lld\n", k == times ? gcd / i : i); break; } } } } } return 0;}Long Gcd(Long a, Long b){ return b == 0 ? a : Gcd(b, a % b);}Long Factor(Long x){ Long cnt = (Long)sqrt(x + 0.5) + 1; Long ans = 1; for (Long i=2; i<cnt; ++i) { if (x % i == 0) { Long temp = 0; while (x % i == 0) { x /= i; temp++; } ans *= 1 + temp; } } if (x > 1) ans *= 2; return ans;}
0 0
- HDOJ-5019-Revenge of GCD 解题报告
- HDOJ 5019 Revenge of GCD
- HDOJ 5019 Revenge of GCD
- hdoj-5019-Revenge of GCD
- 【BestCoder】 HDOJ 5019 Revenge of GCD
- hdu 5019 Revenge of GCD
- hdu 5019 Revenge of GCD
- HDU 5019 - Revenge of GCD
- hdu 5019 Revenge of GCD
- HDU 5019Revenge of GCD
- HDU 5019 Revenge of GCD
- HDU 5019 Revenge of GCD
- HDOJ-1787-GCD Again 解题报告
- HDU 5019 Revenge of GCD (暴力)
- HDU 5019 Revenge of GCD(数学)
- HDU-#5019 Revenge of GCD(枚举)
- HDU——5019 Revenge of GCD
- HDU ACM 5019 Revenge of GCD
- Linux开发环境搭建与使用——Ubuntu 12.04更新源
- 浅谈IOS8之size class
- nginx 增加 spdy 支持并测试
- PAT|中国大学MOOC-翁恺-C语言程序设计习题集13-16
- Maven提高篇系列之四——使用Profile
- HDOJ-5019-Revenge of GCD 解题报告
- SQL基础学习笔记(四)—视图
- 2812的存储器、系统启动与中断、时钟
- 1008. 数组元素循环右移问题 (20)
- 研究Android新闻类app webview中的图片点击
- Android textview中某些字段设置点击监听
- ***转载 LIS LCS n^2和nlogn解法 以及LCIS
- Akka源码分析--转载收藏
- 菜鸟的Linux学习笔记之命令cp