107008 - 公约数最大

题解byliguanghan1 解说代码大神跳过

#include <bits/stdc++.h>
using namespace std;
typedef long long I;
I a[100002];//桶排序
int main()
{
  I n,k;//看题的都知道干什么
  cin>>n>>k;
  for(I i=0; i<n; i++)
  {
    I x;
    cin>>x;
    for(I i=1; i<=sqrt(x); i++)
    {
      if(x%i==0)
      {
        a[i]++;
        if(x!=i*i)
          a[x/i]++;//录入到对应的桶中
      }
    }
  }
  for(I i=100000; i>0; i--)
    if(a[i]>=k)//寻找符合条件的数 
    {
      cout<<i;
      break;
    }
  return 0;
}

纯代码

#include <bits/stdc++.h>
using namespace std;
typedef long long I;
I a[100002];
int main()
{
  I n,k;
  cin>>n>>k;
  for(I i=0; i<n; i++)
  {
    I x;
    cin>>x;
    for(I i=1; i<=sqrt(x); i++)
    {
      if(x%i==0)
      {
        a[i]++;
        if(x!=i*i)
          a[x/i]++;
      }
    }
  }
  for(I i=100000; i>0; i--)
    if(a[i]>=k)
    {
      cout<<i;
      break;
    }
  return 0;
}