所以计算n个数的公约数x,若x==1互质,就能凑成任何数
否则,有公约数x,那么可以不管这n个数了,直接用他们的因子去凑
#include <bits/stdc++.h>
using namespace std;
const int maxn=100009;
int n,k,ans,mark;
int a[maxn],vis[maxn],minn=1e9;
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
int main()
{
cin >> n >> k;
for(int i=1;i<=n;i++)
{
cin>>a[i],a[i]%=k;
if(i==1) mark=a[i];
else mark=gcd(mark,a[i]);
}
if(mark==1)
{
cout<<k<<endl;
for(int i=0;i<k;i++) cout<<i<<" ";//所有数都能取到
return 0;
}
sort(a+1,a+1+n);
int temp=0;
for(int i=1;i<=k;i++)
{
temp=(temp+mark)%k;
if(vis[temp]) break;
ans++,vis[temp]=1;
}
cout<<ans<<endl;
for(int i=0;i<k;i++)
if(vis[i]) cout<<i<<" ";
}