Problem p02995 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
#include <ext/pb_ds/tree_policy.hpp>
#include <functional> // for less
using namespace __gnu_pbds;
using namespace std;
// typedef tree<ll, null_type, less<ll>, rb_tree_tag,
// tree_order_statistics_node_update> ordered_set;
#define ll long long
#define pb push_back
#define ppb pop_back
#define si set<ll>
#define endl '\n'
#define fr first
#define sc second
#define mii map<ll, ll>
#define msi map<string, ll>
#define mis map<ll, string>
#define rep(i, a, b) for (ll i = a; i < b; i++)
#define all(v) v.begin(), v.end()
#define sort(v) sort(all(v))
#define pii pair<ll, ll>
#define vi vector<ll>
#define vii vector<pair<ll, ll>>
#define vs vector<string>
#define sz(x) (ll) x.size()
#define M 1000000007
#define bs binary_search
#define rev(a) reverse(all(a));
#define sp(n) setprecision(n)
#define spl " "
#define arr(a, n) rep(i, 0, n) cin >> a[i]
#define mod 998244353
#define print_vector(a)                                                        \
  for (auto t : a)                                                             \
    cout << t << " ";                                                          \
  cout << endl;
#define print_arr(a, n)                                                        \
  rep(i, 0, n) cout << a[i] << " ";                                            \
  cout << endl;
#define show(a, n)                                                             \
  for (ll i = 0; i < n; i++)                                                   \
    cout << a[i] << " ";                                                       \
  cout << endl;
#define debug(x) cout << #x << " is " << x << endl;
#define time                                                                   \
  cout << "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n";
#define INF 1ll << 31
#define hi cout << "hi" << endl;
const ll maxn = int(3e5) + 500;
const ll maxa = (1 << 20) + 3;
ll bpow(ll a, ll b, ll mm = M) {
  ll res = 1;

  while (b) {
    if (b & 1)
      res = (res * a) % mm;
    a = (a * a) % mm;

    b >>= 1;
  }

  return res;
}

void solve() {
  ll a, b, c, d;
  cin >> a >> b >> c >> d;
  ll g = __gcd(c, d);
  g = (c * d) / g;
  ll x = b / c;
  ll y = (a - 1) / c;
  ll z = x - y;
  x = b / d;
  y = (a - 1) / d;
  ll zz = (x - y);
  x = b / (g);
  y = (a - 1) / (g);
  ll zzz = (x - y);
  // cout<<zzz<<endl;
  ll ans = z + zz - zzz;
  // cout<<ans<<endl;
  cout << b - a + 1 - ans << endl;
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
#ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif
  ll t = 1;
  // cin>>t;
  while (t--)
    solve();
}


Fixed submission:
#include <bits/stdc++.h>
#include <ext/pb_ds/tree_policy.hpp>
#include <functional> // for less
using namespace __gnu_pbds;
using namespace std;
// typedef tree<ll, null_type, less<ll>, rb_tree_tag,
// tree_order_statistics_node_update> ordered_set;
#define ll long long
#define pb push_back
#define ppb pop_back
#define si set<ll>
#define endl '\n'
#define fr first
#define sc second
#define mii map<ll, ll>
#define msi map<string, ll>
#define mis map<ll, string>
#define rep(i, a, b) for (ll i = a; i < b; i++)
#define all(v) v.begin(), v.end()
#define sort(v) sort(all(v))
#define pii pair<ll, ll>
#define vi vector<ll>
#define vii vector<pair<ll, ll>>
#define vs vector<string>
#define sz(x) (ll) x.size()
#define M 1000000007
#define bs binary_search
#define rev(a) reverse(all(a));
#define sp(n) setprecision(n)
#define spl " "
#define arr(a, n) rep(i, 0, n) cin >> a[i]
#define mod 998244353
#define print_vector(a)                                                        \
  for (auto t : a)                                                             \
    cout << t << " ";                                                          \
  cout << endl;
#define print_arr(a, n)                                                        \
  rep(i, 0, n) cout << a[i] << " ";                                            \
  cout << endl;
#define show(a, n)                                                             \
  for (ll i = 0; i < n; i++)                                                   \
    cout << a[i] << " ";                                                       \
  cout << endl;
#define debug(x) cout << #x << " is " << x << endl;
#define time                                                                   \
  cout << "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n";
#define INF 1ll << 31
#define hi cout << "hi" << endl;
const ll maxn = int(3e5) + 500;
const ll maxa = (1 << 20) + 3;
ll bpow(ll a, ll b, ll mm = M) {
  ll res = 1;

  while (b) {
    if (b & 1)
      res = (res * a) % mm;
    a = (a * a) % mm;

    b >>= 1;
  }

  return res;
}

void solve() {
  ll a, b, c, d;
  cin >> a >> b >> c >> d;
  ll g = __gcd(c, d);
  g = (c * d) / g;
  ll x = b / c;
  ll y = (a - 1) / c;
  ll z = x - y;
  x = b / d;
  y = (a - 1) / d;
  ll zz = (x - y);
  x = b / (g);
  y = (a - 1) / (g);
  ll zzz = (x - y);
  // cout<<zzz<<endl;
  ll ans = z + zz - zzz;
  // cout<<ans<<endl;
  cout << b - a + 1 - ans << endl;
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ll t = 1;
  // cin>>t;
  while (t--)
    solve();
}