Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <memory.h>
- #include <cstdio>
- #include <time.h>
- using namespace std;
- const int nn = 1 << 20;
- int d[nn];
- long long f(long long x) {
- return x * (x+1) / 2;
- }
- long long memo[nn * 2];
- long long h(long long n, long long m) {
- if (memo[n + m] >= 0) return memo[n + m];
- long long res = n * m;
- for (int i = 2; i <= n && i <= m; ++i)
- res += h(n / i, m / i) * -1;
- return memo[n + m] = res;
- }
- long long g(long long n, long long m) {
- long long res = 0;
- memset(memo, -1, sizeof memo);
- for (int a = 1; a <= n && a <= m; ++a) {
- res += h(n / a, m / a) * a;
- }
- return res;
- }
- long long solve(int n, int m, int a, int b) {
- long long res = f(a-1) + f(b-1) + f(n-a) + f(m-b);
- res += g(a - 1, b - 1);
- res += g(a - 1, m - b);
- res += g(n - a, b - 1);
- res += g(n - a, m - b);
- return res;
- }
- int main() {
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- for (int i = 2; i < nn; ++i) if (!d[i])
- for (int j = i; j < nn; j += i) d[j] = i;
- int n, m, a, b;
- cin >> n >> m >> b >> a;
- long long res = solve(n, m, a, b);
- cout << res << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment