【发布时间】:2020-04-05 07:53:35
【问题描述】:
int main() {
int t;
cin >> t;
while (t--) {
ll n;
cin >> n;
set<int> list;
vector<ll> vec;
for (size_t i = 1; i <= n; i++) {
list.insert(i);
}
bool more = true;
while (more) {
vec.clear();
auto it = list.begin();
if (list.size() == 1) {
cout << "1 1" << endl;
break;
}
vec.push_back(*it);
ll num = *it;
list.erase(it);
int count = 1;
auto itt = list.begin();
bool y = false;
for (itt; itt != list.end(); ) { // ...(1)
if (checkPrime(*itt)) {
vec.push_back(*itt);
num = *itt;
list.erase(itt);
count++;
}
else if (gcd(num, *itt) == 1) {
vec.push_back(*itt);
num = *itt;
list.erase(itt);
count++;
}
else itt++;
}
if (count == 1) {
cout << "2 1" << num << endl;
}
else {
cout << count << " ";
for (size_t i = 0; i < vec.size(); i++) {
cout << vec[i] << " ";
}
cout << endl;
}
if (list.size() == 1) more = false;
}
}
return 0;
}
此程序正在尝试查找某个范围内的互质数。但是在 (1) 中的每一次最后一次迭代之后,它都会导致一个错误,指出调试断言失败!表达式映射/集迭代器不兼容。为什么会这样? checkPrime 和 gcd 是检查一个数是否为素数并分别查找两个数的 gcd 的函数。
【问题讨论】: