一开始想错了。想到要被2^k整除,那么找到最大的lowbit(x)即可。
但是也有可能实际答案比lowbit还要大。
所以应该直接枚举k,然后看是否有和2^k - 1一系列与之后为0的,如果有的话说明k满足,k从大到小枚举即可。
AC代码:
#include <cstdio>
#include <string.h>
const int MAX_NUMBER = 100006;
int value[MAX_NUMBER];
int ans[MAX_NUMBER];
int number;
int main() {
scanf("%d", &number);
for (int i = 1; i <= number; i++) {
scanf("%d", &value[i]);
}
for (int i = 30; i >= 0; i--) {
int temp = (1 << i) - 1;
int length = 0;
for (int j = 1; j <= number; j++) {
if (value[j] & (1 << i)) {
temp = temp & value[j];
ans[++length] = value[j];
}
}
if (!temp) {
printf("%d\n", length);
for (int j = 1; j <= length; j++) {
if (j == 1) {
printf("%d", ans[j]);
}
else {
printf(" %d", ans[j]);
}
}
printf("\n");
break;
}
}
return 0;
}