最大的最大公约数

原创 2017年08月14日 13:27:37
题目来源: SGU
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
 收藏
 关注
给出N个正整数,找出N个数两两之间最大公约数的最大值。例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5。
Input
第1行:一个数N,表示输入正整数的数量。(2 <= N <= 50000)
第2 - N + 1行:每行1个数,对应输入的正整数.(1 <= S[i] <= 1000000)
Output
输出两两之间最大公约数的最大值。
Input示例
4
9
15
25
16
 Output示例
5
    n^2*1e6的方法就不阐述了,应该每个人都想的到,然而面对庞大的时间复杂度,我们需要想一种更为优质的解来解决这个问题。作为一个公约数,首先,它肯定是数列中两个或以上数的约数(这点很重要,如果没有这一点为前提,后面的解题就无法展开),也就是说,针对每一个数x,我们可以暴力枚举出它的约数,时间复杂度为O(x),再从1e6这个最大的约数开始找,找到第一个出现过两次及以上的约数,则它一定是这串数列中最大的最大公约数。具体实现方法请看代码。
#include
#include
using namespace std;
int f[1000005];
int main(){
	int n,i;
	scanf("%d",&n);
	for (i=1;i<=n;i++){
		int x;
		scanf("%d",&x);
		int y=sqrt(x);
		for (int j=1;j<=y;j++){
			if (x%j==0){
				int k=x/j;
				f[j]++;f[k]++;
			}
		}
	}
	for(i=1000000;i>=1;i--){
		if (f[i]>=2) break;
	}
    printf("%d\n",i);
}

51nod 1179 最大的最大公约数 (好题!!!!)

给出N个正整数,找出N个数两两之间最大公约数的最大值。例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5。 Input 第1行:一个数N...
  • h1021456873
  • h1021456873
  • 2015-10-14 22:38:40
  • 831

hdu 5656 CA Loves GCD(n个任选k个的最大公约数和)

CA Loves GCD    Accepts: 64    Submissions: 535  Time Limit: 6000/3000 MS (Java/Others)    Memory L...
  • Fun_Zero
  • Fun_Zero
  • 2016-04-03 14:37:32
  • 862

zzuli OJ 1062: 最大公约数

Description 输入两个正整数,输出其最大公约数。 Input 输入两个正整数m和n,数据之间用空格隔开。 Output 输出一个整数,表示m和n的最大公约数。 ...
  • sinat_25926481
  • sinat_25926481
  • 2015-08-28 16:37:11
  • 5073

编程之美读书笔记(5)最大公约数

问题: 求两个数的最大公约数 解法一: 欧几里得辗转相除法: f(x,y) = GCD(x,y), 取k = x / y, b = x % y,则:x = k*y + b; 如果一个数能整除...
  • SJF0115
  • SJF0115
  • 2013-02-25 13:01:22
  • 5485

最大公约数(递归与非递归)

最大公约数求解中,递归方法比非递归方法效率高,递归方法编译时间为0.45-0.55 seconds;非递归方法编译时间为1.15-1.17 seconds #include #include i...
  • java2316
  • java2316
  • 2014-03-06 18:41:18
  • 1029

php辗转法实现最大公约数

header('Content-Type:text/html;charset=utf-8'); //获取表单所传数字,如果没有则生成1-10000之间的随机数为初始值 $num1 = isset(...
  • wmlml
  • wmlml
  • 2015-08-11 11:14:01
  • 481

求最大公约数和最小公倍数(java语言)

package com.sun.maxCommonDivisorAndminCommonMultiple; /** * * @author:孙创 * @date:2017年4月10日 * ...
  • chuangsun
  • chuangsun
  • 2017-04-10 15:44:55
  • 905

java算法——求最大公约数和最小公倍数

//求最大公约数和最小公倍数 /*求最大公约数方法:辗转相除法 始终用较大数除以较小数,然后用余数代替较大数 整除时的除数就是最大公约数 举例:222 407求最大公约数 222 407(407除...
  • tingzhiyi
  • tingzhiyi
  • 2016-07-28 20:26:57
  • 9519

Java最大公约数和最小公倍数

最大公约数有下面两种方法: 辗转相除法:又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公约数的算法。 辗转相减法:即尼考曼彻斯法,其特色是做一系列减法,从而求得最...
  • shineflowers
  • shineflowers
  • 2014-12-11 15:46:19
  • 3150

C语言计算两个正整数的最大公约数与最大公倍数

先给出源码,下面解释。 #include void main() { int a,b,c,d; //定义四个变量 scanf("%d,%d",&a,&b); d=a*b;...
  • wshngyf
  • wshngyf
  • 2015-03-18 09:02:33
  • 1260
收藏助手
不良信息举报
您举报文章:最大的最大公约数
举报原因:
原因补充:

(最多只允许输入30个字)