列表

详情


NC240151. 最大gcd

描述

给一个长度为 n 的序列
定义序列的最大 为:每次选择两个正整数 ,最大的 即为这个序列的最大

输入描述

第一行一个整数 
第二行 n 个正整数 ,表示序列 a

输出描述

一个整数,表示这个序列的最大 

示例1

输入:

3
1 2 2

输出:

2

说明:

\gcd(a_1, a_2) = \gcd(1,2) = 1
\gcd(a_1, a_3) = \gcd(1,2) = 1
\gcd(a_2, a_3) = \gcd(2,2) = 2
所以最大 \gcd2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 169ms, 内存消耗: 4248K, 提交时间: 2022-09-17 09:32:30

#include <stdio.h>
int a[1000005];
int main()
{
	int n,i,max=0,ans,j,l;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d",&l);
		a[l]++;
		if(l>max) max=l;
	}
	for(i=2;i<=max;i++){
		int c=0;
		for(j=i;j<=max;j+=i){
			c+=a[j];
		}
		if(c>=2) ans=i;
	}
	printf("%d\n",ans);
	return 0;
}

C++(clang++ 11.0.1) 解法, 执行用时: 318ms, 内存消耗: 5076K, 提交时间: 2022-09-20 21:04:10

#include<bits/stdc++.h>
using namespace std;
int c[1000005];
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int tp;
		cin>>tp;
		c[tp]++;
	}
	int res;
	for(int i=1;i<=1e6;i++)
	{
		int cnt=0;
		for(int j=i;j<=1e6;j+=i){
			cnt+=c[j];
		}
		if(cnt>=2)res=i;
	}
	cout<<res;
}

pypy3 解法, 执行用时: 724ms, 内存消耗: 124092K, 提交时间: 2022-09-19 20:46:31

n=int(input())
arr=[0]*(10**6+9)
a=list(map(int,input().split(' ')))
for i in range(n):
    arr[a[i]]+=1
x=max(a)
ans=0
for i in range(1,x+1):
    cnt=0
    for j in range(i,x+1,i):
        cnt+=arr[j]
    if cnt>1:
        ans=i
print(ans)

C++(g++ 7.5.0) 解法, 执行用时: 321ms, 内存消耗: 11116K, 提交时间: 2022-09-25 22:27:55

#include<iostream>
using namespace std;
enum{N=1000001};int t[N],i,j,c,a;
int main(){
  for(cin>>i;cin>>i;)++t[i];
  for(i=0;++i<N;c>1&&(a=i))
    for(c=j=0;(j+=i)<N;)c+=t[j];cout<<a;
}

上一题