题意:给你一个序列,然后求删除几个数之后整个序列的最大公约数增大
思路:我们首先要求出这个公共的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; } }
原文地址:https://www.cnblogs.com/Tianwell/p/11320374.html
时间: 2024-10-13 14:26:24