Найти количество пар чисел от 1 до n и от 1 до m, таких чтобы 1 ≤ x ≤ n, 1 ≤ y ≤ m и (x + y) mod 5 = 0;
Найти количество пар чисел от 1 до n и от 1 до m, таких чтобы 1 ≤ x ≤ n, 1 ≤ y ≤ m и (x + y) % 5 = 0. Предпринимал такую попытку решения:
ll count_mod(ll num, ll mod) {
return num / 5 + (num % 5 >= mod);
}
int main() {
ll n, m;
cin >> n >> m;
ll countn[5] = {
count_mod(n, 0),
count_mod(n, 1),
count_mod(n, 2),
count_mod(n, 3),
count_mod(n, 4)
};
ll countm[5] = {
count_mod(m, 0),
count_mod(m, 1),
count_mod(m, 2),
count_mod(m, 3),
count_mod(m, 4)
};
cout <<
countn[0] * countm[0] +
countn[1] * countm[4] +
countn[2] * countm[3] +
countn[3] * countm[2] +
countn[4] * countm[1]
<< "\n";
return 0;
}
Но он не проходит все тесты.
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Берем num = 1, mod = 0.
Что должно получиться? Верно, 0: нет ни одного числа, которое дает в остатке 0 при делении на 5.
А по вашей формуле что?
0/5 + (1%5 >= 0) = 0 + (1 >= 0) = 1
Дальше пояснять не надо?
P.S. простейшая реализация:
int count_mod(int num, int mod)
{
return std::max(0,int(floor((num-mod)/5.) - ceil((1-mod)/5.)+1));
}
Если ограничиться только целочисленными операциями, то
int count_mod(int n, int m)
{
if (m > n) return 0;
int first = (m >= 1) ? m : m + 5;
if (first > n) return 0;
int last = n - (n - m) % 5;
if (last < first) return 0;
return (last - first) / 5 + 1;
}