#include<bits/stdc++.h>
using namespace std;
long long n;
long long a[10000000];
bool check(long long x)//x块会变化
{
long long i,g=a[1],t;
for(i=1;i<=n;i++)//所有元素的公因数
{
g=__gcd(g,a[i]);
t=g;
}
g=a[n];
for(i=n;i>x;i--)
{
g=__gcd(g,a[i]);
cout<<g<<" ";
}
cout<<endl;
if(t<g)
return 1;
else
return 0;
}
int main()
{
cin>>n;
long long i;
for(i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
for(i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
if(check(n)==0)
{
cout<<-1;
return 0;
}
else
{
long long l=0,r=n,mid;
while(l<r)
{
mid=(r+l)/2;
if(check(mid))
r=mid;
else
l=mid+1;
}
return 0;
}
}
这个应该怎么改才能实现去掉数组a中的一些元素使得最大公因数发生变化啊?
比如说这组数据这里输出时19,但是应该输出9才对啊
20
524 91 152 743 939 133 768 761 671 780 728 742 509 364 376 132 956 594 963 359