比赛 NOIP2023模拟赛4 评测结果 C
题目名称 最大公约数 最终得分 0
用户昵称 黄天宇 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2023-11-16 11:54:39
显示代码纯文本
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int n;
int a[100005];
int s;
int t[100005];
int minx=2e9,maxx;
int gcd(int a,int b){
    if(b==0) return a;
    else return gcd(b,a%b);
}
void g(int x){
    for(int i=3;i<sqrt(x);i++){
        if(x%i==0){
            t[i]++;
        }
    }
    if(x%2==0) t[2]++;
    return;
}
int main(){
    freopen("gcd.in","r",stdin);
    freopen("gcd.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    s=gcd(a[1],a[2]);
    for(int i=2;i<n;i++){
        s=gcd(s,a[i]);
    }
    for(int i=1;i<=n;i++){
        a[i]/=s;
        g(a[i]);
        maxx=max(a[i],maxx);
    }
    for(int i=2;i<=maxx;i++){
        if(t[i]!=n&&t[i]!=0) 
        minx=min(minx,n-t[i]);
    }
    cout<<minx<<endl;
    return 0;
}