#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=3e6+10;
int t,n,k;
int cnt,vis[N],p[N],f[N],a[N],ans[N];
int gcd(int a,int b){return (b==0?a:gcd(b,a%b));}
void oula(){
for(int i=2;i<N;i++){
if(vis[i]==0){p[++cnt]=i;}
for(int j=1;j<=cnt&&(p[j]*i)<N;j++){
vis[i*p[j]]=1;
if(i%p[j]==0) break;
}
}
return ;
}
int main(){
ios::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
freopen("nzq.in","r",stdin);
freopen("nzq.out","w",stdout);
cin>>t;
// oula();
for(int c=1;c<=t;c++){
cin>>n>>k;
int dyz=1,cnt=0;
if(k!=1){
for(int i=2;i<=n/2;i++){
int lyx=0,d=1;
for(int j=1;j*i<=n;j++){
if(f[i*j]||gcd(d,j)!=1) continue;
f[i*j]=i;
lyx++;
a[++cnt]=i*j;
d=j;
if(lyx>=2) break;
}
if(lyx>=2) dyz++;
// else if(lyx==1) f[a[cnt]]=0,a[cnt]=0,cnt--;
if(dyz>=k) break;
}
}
if(dyz<k){
cout<<"No\n";
continue;
}
cout<<"Yes\n";
for(int i=1;i<=cnt;i++) cout<<a[i]<<' ';
for(int i=1;i<=n;i++) if(!f[i]) cout<<i<<' ';
for(int i=1;i<=n;i++) f[i]=0;
}
return 0;
}
想法是枚举gcd,但WA了
请问正解思路是什么