CF#511-C Enlarge GCD(gcd)

题意:给你一个序列,然后求删除几个数之后整个序列的最大公约数增大
思路:我们首先要求出这个公共的gcd,然后要使gcd增大我们可以尝试对增加gcd并判断是否为存在某个数为该数的gcd
同时统计个数,为公共gcd最大的即为最后所求的值。(增加上限就是到最大的那个数)
范围为1~1e5,arr[i]为1.5e7

完整代码:

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
int arr[maxn];
int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}
int main(){
    int n;
    while(cin>>n){
        for(int i =0 ;i<n;i++){
            cin>>arr[i];
        }
        sort(arr,arr+n);
        int g = arr[0];
        for(int i = 1;i<n;i++){
            g = gcd(arr[i],g);
        }
        int ans = 0;
        int cont;
        for(int j = g;j<=arr[n-1];j++){
            cont = 0;
            for(int k = 0;k<n;k++){
                if(arr[i]%g) continue;
                else cont++;
            }
            ans = max(ans,cont);
        }
        cout<<n-ans<<endl;

    }
}

猜你喜欢

转载自www.cnblogs.com/Tianwell/p/11320374.html
今日推荐