#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<cmath>
using namespace std;
const int maxn = 1.5e7 + 10;
int vis[maxn];
int num[maxn];
int a[301000];
int gcd(int a, int b)
{
if (!b)
return a;
return gcd(b, a % b);
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
int b=0;
memset(vis,0,sizeof(vis));
for (int i = 0; i < n; i++)
{
cin>>a[i];
num[a[i]]++;
if (b==0)
b = a[i];
else
b = gcd(b, a[i]);
}
int res = n;
for (int i = b + 1; i < maxn; i++)
if (!vis[i])
{
int tot= 0;
int j;
for (j = i; j < maxn; j += i)
{
vis[j] = 1;
tot+= num[j];
}
res = min(res, n - tot);
}
if (res < n)
cout<<res<<endl;
else
cout<<"-1"<<endl;
return 0;
}
```注意:1.vis 是 避免一些没用的计算 因为如果前面已经vis过 它一定没有之前的更优。
2.tle 把cin cout 换成 printf scanf 或者 像这个这样写 主函数前三行加上ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Enlarge GCD
最新推荐文章于 2019-08-05 20:09:04 发布