http://codeforces.com/contest/1047/problem/C
#include<bits/stdc++.h>
using namespace std;
const int maxn=1.5e7+10;
const int N=300010;
int cnt[maxn],prime[N],a[N],n,d,m,v[maxn],tot,ans;
int gcd(int x,int y){
if (y==0){
return x;
}else{
return gcd(y,x%y);
}
}
int main(){
scanf("%d",&n);
scanf("%d",&a[1]);
d=a[1];
for (int i=2;i<=n;i++){
scanf("%d",&a[i]);
d=gcd(d,a[i]);
}
m=sqrt(maxn);
for (int i=2;i<=m;i++){
if (v[i]==0){
prime[tot++]=i;
}
for (int j=0 ;j<tot && prime[j]*i <= maxn;j++){
v[prime[j]*i] =1;
if (i%prime[j]==0){
break;
}
}
}
for (int i=1;i<=n;i++){
a[i]=a[i]/d;
for (int j=0;j<tot;j++){
if (a[i]%prime[j]==0){
cnt[prime[j]] ++;
while (a[i]%prime[j]==0){
a[i]=a[i]/prime[j];
}
}
}
if (a[i]>1){
cnt[a[i]] ++;
}
}
ans=n;
for (int i=2;i<=maxn;i++){
ans=min(ans,n-cnt[i]);
}
if (ans==n) ans=-1;
printf("%d\n",ans);
}