NC240151. 最大gcd
描述
输入描述
第一行一个整数 。第二行 个正整数 ,表示序列 。
输出描述
一个整数,表示这个序列的最大 。
示例1
输入:
3 1 2 2
输出:
2
说明:
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; }