折腾了半天
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define rep(i,x,y) for(int i=(x);i<=(y);i++)
#define repl(i,x,y) for(int i=(x);i<(y);i++)
#define repd(i,x,y) for(int i=(x);i>=(y);i--)
using namespace std;
const int M=1e2+5;
const int N=1e5+5;
int n,m,num,tot,z[M],fac[M],cnt[M],ans[N];
void split() {
for(int i=2;i*i<=m;i++) if(m%i==0) {
++num;
fac[num]=i;
cnt[num]=0;
do {
cnt[num]++;m/=i;
} while(m%i==0);
}
if(m>1) {
++num;
fac[num]=m;
cnt[num]=1;
}
}
bool check(int n,int i) {
int x=n-i,y=i;
rep(i,1,num) {
int p=fac[i];
while(x%p==0) {
x/=p;z[i]++;
}
while(y%p==0) {
y/=p;z[i]--;
}
}
rep(i,1,num) if(z[i]<cnt[i]) return false;return true;
}
int main() {
while(~scanf("%d%d",&n,&m)) {
num=tot=0;split();
memset(z,0,sizeof(z));
repl(i,1,n-1) if(check(n,i)) ans[tot++]=i+1;
printf("%d\n",tot);
repl(i,0,tot) printf("%s%d",i==0?"":" ",ans[i]);puts("");
}
return 0;
}