列表

详情


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

原站题解

import java.util.Scanner;
public class Main {
public static void main(String[] arg) {
Scanner scanner = new Scanner(System.in);
// todo
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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;
}

上一题