Вирішимо задачу за допомогою симуляції розкладу цього місяця підраховуючи кількість зроблених задач кожного дня. Для кращого розуміння нижче наведений код. Позначимо поточний день за $$$d$$$, початково він рівний 1. Тоді у циклі поки $$$d$$$ не перевищує кількість днів у місяці будемо підраховувати відповідь. Врахуємо перші $$$a$$$ днів, розглянувши послідовно кожен день: якщо $$$d$$$ кратне $$$n$$$, то це день хаотичного відпочинку, бо кожен $$$n$$$-тий день є таким, відповідно у цей день ніякої роботи зроблено не буде. Інакше цей день є робочим. У такому випадку перевіримо чи він є днем подвійної ефективності завдяки аналогічній перевірці на кратність числа $$$d$$$ числу $$$m$$$, якщо воно кратне, то збільшимо відповідь на $$$2$$$, інакше тільки на $$$1$$$, бо день був звичайним. Оскільки були оброблені $$$a$$$ днів, то наступні $$$b$$$ днів є гарантовано вихідними. Тоді просто пропустимо їх збільшивши $$$d$$$ на $$$b$$$, бо ніякої роботи у цей період не буде.
int res = 0;
int d = 1;
while (d <= k) {
for (int i = 0; i < a && d <= k; i++) {
if (d res += 0;
} else if (d res += 2;
} else {
res += 1;
}
d++;
}
d += b;
}