Проблема здесь
bool prime = true;
for (int d : primes) {
...
if (prime) primes.push_back(m);
}
Нельзя использовать диапазон, основанный на цикле для вектора, если цикл также изменяет размер вектора. Диапазон, основанный на циклах, зависит от итераторов к вектору, и все итераторы к вектору становятся недействительными, если в вектор добавляется элемент.
Конечно, вы действительно хотели написать этот код
bool prime = true;
for (int d : primes) {
...
}
if (prime)
primes.push_back(m);
, что хорошо, потому что вектор изменяется после цикла, а не во время цикла.
Урок должен быть очень строгим с тем, как вы делаете отступ для кода. Неправильные строки кода легко обнаружить, если всегда правильно делать отступы.