RT. 样例过了 但是测试点全WA
code:
#include <cstdio>
#include <algorithm>
#define int long long
const int maxn = 1e6 + 5;
int t;
int n,d,min_g,c,cnt_fac,g[maxn];
int phi[maxn],pri[maxn],fac[maxn];
bool isp[maxn];
inline int read() {
#define gc c = getchar()
int d = 0;
int f = 0,gc;
while(c < 48 || c > 57) f |= (c == '-'),gc;
while(c > 47 && c < 58) d = (d << 1) + (d << 3) + (c ^ 48),gc;
#undef gc
return f ? -d : d;
}
inline void getPhi(int n) {
phi[1] = 1;
for(int i = 2;i <= n;i ++) {
if(!isp[i]) pri[++ pri[0]] = i,phi[i] = i - 1;
for(int j = 1;j <= pri[0] && i * pri[j] <= n;j ++) {
isp[i * pri[j]] = true;
if(!(i % pri[j])) {
phi[i * pri[j]] = phi[i] * pri[j];
break;
} else phi[i * pri[j]] = phi[i] * (pri[j] - 1);
}
}
return ;
}
int gcd(int a,int b) {
if(!b) return a;
return gcd(b,a % b);
}
int fpow(int a,int b,int mod) {
int res = 1;
a %= mod;
while(b) {
if(b & 1) res = res * a % mod;
a = a * a % mod,b >>= 1;
}
return res;
}
void getFactor(int n) {
cnt_fac = 0;
int p = phi[n];
for(int i = 2;i * i <= p;i ++)
if(!(p % i)) {
fac[++ cnt_fac] = i;
while(!(p % i)) p /= i;
}
if(p > 1) fac[++ cnt_fac] = p;
return ;
}
bool exist(int n) {
if(!(n & 1)) n >>= 1;
if(n == 1 || n == 2) return true;
if(!(n & 1)) return false;
for(int i = 3;i * i <= n;i ++) {
if(!(n % i)) {
while(!(n % i)) n /= i;
break;
}
}
return n == 1;
}
bool chkG(int g,int p) {
if(fpow(g,phi[p],p) != 1) return false;
for(int i = 1;i <= cnt_fac;i ++)
if(fpow(g,phi[p] / fac[i],p) == 1) return false;
return true;
}
int getMinG(int n) {
for(int i = 1;i < n;i ++) if(chkG(i,n)) return i;
}
int getAllG(int n,int gx) {
int mul = 1,cnt = 0;
for(int i = 1;i <= phi[n];i ++) {
mul = 1ll * mul * gx % n;
if(gcd(i,phi[n]) == 1) g[++ cnt] = mul;
}
return cnt;
}
void solve(int n,int d) {
if(exist(n)) {
getFactor(n);
min_g = getMinG(n);
c = getAllG(n,min_g);
std::sort(g + 1,g + c + 1);
printf("%lld\n",c);
for(int i = 1;i <= c / d;i ++)
printf("%lld ",g[i * d]);
puts("");
} else puts("0\n");
return ;
}
signed main() {
getPhi(1e6);
t = read();
for(;t;t --) {
n = read(),d = read();
solve(n,d);
}
return 0;
}