using s64 = longlong; using u64 = unsignedlonglong;
/* 取 min */ template <classT> inlinevoidchmin(T &x, const T &y){ if (x > y) { x = y; } } /* 取 max */ template <classT> inlinevoidchmax(T &x, const T &y){ if (x < y) { x = y; } }
/* 类欧几里德算法(要求 a, b >= 0 且 c > 0) */ s64 euclid(s64 a, s64 b, s64 c, s64 n){ if (a == 0) { return (n + 1) * (b / c); } if (a >= c || b >= c) { returneuclid(a % c, b % c, c, n) + (n * (n + 1) / 2) * (a / c) + (n + 1) * (b / c); } s64 m = (a * n + b) / c; if (m == 0) { return0; } return n * m - euclid(c, c - b - 1, a, m - 1); }
/* 类欧几里德算法 */ s64 euclid_full(s64 a, s64 b, s64 c, s64 n){ if (c < 0) { a = -a, b = -b, c = -c; } s64 res = 0; if (a < 0) { s64 t = (a - c + 1) / c; a -= t * c, res += (n * (n + 1) / 2) * t; } if (b < 0) { s64 t = (b - c + 1) / c; b -= t * c, res += (n + 1) * t; } return res + euclid(a, b, c, n); }
voidwork(){ s64 k1, b1, k2, b2, n, m; std::cin >> k1 >> b1 >> k2 >> b2 >> n >> m;
s64 ans = n; ans += euclid_full(k1, b1, m, n - 1); ans -= euclid_full(k2, b2, m, n - 1); ans += euclid_full(k2 - k1, b2 - b1 - 1, m, n - 1);