import java.util.*;

public class Main {

    Scanner sc = new Scanner(System.in);


    public static void main(String[] args) {
        new Main().run();
    }

    void run() {

        long x = sc.nextLong();
        long y = sc.nextLong();
        long c = sc.nextLong();
        long d = sc.nextLong();

        long xc = (x % c == 0) ? x / c : x / c + 1;
        long yc = y / c;
        long xd = (x % d == 0) ? x / d : x / d + 1;
        long yd = y / d;

        long lcm = lcm(c, d);

        long comx = (x % lcm == 0) ? x / lcm : x / lcm + 1;
        long comy = y / lcm;

//        System.out.println(xc);
//        System.out.println(yc);
//        System.out.println(xd);
//        System.out.println(yd);
//        System.out.println(lcm);
//        System.out.println(comx);
//        System.out.println(comy);

        System.out.println(y - x + 1 - ((yc - xc + 1) + (yd - xd + 1) - (comy - comx + 1)));


    }

    long lcm(long c, long d) {
        return c * d / gcd(c, d);
    }

    long gcd(long c, long d) {
        if (c < d) return gcd(d, c);
        if (d == 0) return c;
        return gcd(d, c % d);
    }

} import java.util.*; util.* java public class Main {

    Scanner sc = new Scanner(System.in);


    public static void main(String[] args) {
        new Main().run();
    }

    void run() {

        long x = sc.nextLong();
        long y = sc.nextLong();
        long c = sc.nextLong();
        long d = sc.nextLong();

        long xc = (x % c == 0) ? x / c : x / c + 1;
        long yc = y / c;
        long xd = (x % d == 0) ? x / d : x / d + 1;
        long yd = y / d;

        long lcm = lcm(c, d);

        long comx = (x % lcm == 0) ? x / lcm : x / lcm + 1;
        long comy = y / lcm;

//        System.out.println(xc);
//        System.out.println(yc);
//        System.out.println(xd);
//        System.out.println(yd);
//        System.out.println(lcm);
//        System.out.println(comx);
//        System.out.println(comy);

        System.out.println(y - x + 1 - ((yc - xc + 1) + (yd - xd + 1) - (comy - comx + 1)));


    }

    long lcm(long c, long d) {
        return c * d / gcd(c, d);
    }

    long gcd(long c, long d) {
        if (c < d) return gcd(d, c);
        if (d == 0) return c;
        return gcd(d, c % d);
    }

} Main Scanner sc = new Scanner(System.in); sc new Scanner(System.in) public static void main(String[] args) {
        new Main().run();
    } main {
        new Main().run();
    } new Main().run() new Main().run new Main() String[] args args void run() {

        long x = sc.nextLong();
        long y = sc.nextLong();
        long c = sc.nextLong();
        long d = sc.nextLong();

        long xc = (x % c == 0) ? x / c : x / c + 1;
        long yc = y / c;
        long xd = (x % d == 0) ? x / d : x / d + 1;
        long yd = y / d;

        long lcm = lcm(c, d);

        long comx = (x % lcm == 0) ? x / lcm : x / lcm + 1;
        long comy = y / lcm;

//        System.out.println(xc);
//        System.out.println(yc);
//        System.out.println(xd);
//        System.out.println(yd);
//        System.out.println(lcm);
//        System.out.println(comx);
//        System.out.println(comy);

        System.out.println(y - x + 1 - ((yc - xc + 1) + (yd - xd + 1) - (comy - comx + 1)));


    } run {

        long x = sc.nextLong();
        long y = sc.nextLong();
        long c = sc.nextLong();
        long d = sc.nextLong();

        long xc = (x % c == 0) ? x / c : x / c + 1;
        long yc = y / c;
        long xd = (x % d == 0) ? x / d : x / d + 1;
        long yd = y / d;

        long lcm = lcm(c, d);

        long comx = (x % lcm == 0) ? x / lcm : x / lcm + 1;
        long comy = y / lcm;

//        System.out.println(xc);
//        System.out.println(yc);
//        System.out.println(xd);
//        System.out.println(yd);
//        System.out.println(lcm);
//        System.out.println(comx);
//        System.out.println(comy);

        System.out.println(y - x + 1 - ((yc - xc + 1) + (yd - xd + 1) - (comy - comx + 1)));


    } long x = sc.nextLong(); x sc.nextLong() sc.nextLong sc long y = sc.nextLong(); y sc.nextLong() sc.nextLong sc long c = sc.nextLong(); c sc.nextLong() sc.nextLong sc long d = sc.nextLong(); d sc.nextLong() sc.nextLong sc long xc = (x % c == 0) ? x / c : x / c + 1; xc (x % c == 0) ? x / c : x / c + 1 (x % c == 0) x % c x c 0 x / c x c x / c + 1 x / c x c 1 long yc = y / c; yc y / c y c long xd = (x % d == 0) ? x / d : x / d + 1; xd (x % d == 0) ? x / d : x / d + 1 (x % d == 0) x % d x d 0 x / d x d x / d + 1 x / d x d 1 long yd = y / d; yd y / d y d long lcm = lcm(c, d); lcm lcm(c, d) lcm c d long comx = (x % lcm == 0) ? x / lcm : x / lcm + 1; comx (x % lcm == 0) ? x / lcm : x / lcm + 1 (x % lcm == 0) x % lcm x lcm 0 x / lcm x lcm x / lcm + 1 x / lcm x lcm 1 long comy = y / lcm; comy y / lcm y lcm System.out.println(y - x + 1 - ((yc - xc + 1) + (yd - xd + 1) - (comy - comx + 1))) System.out.println System.out System System.out y - x + 1 - ((yc - xc + 1) + (yd - xd + 1) - (comy - comx + 1)) y - x + 1 y - x y x 1 ((yc - xc + 1) + (yd - xd + 1) - (comy - comx + 1)) (yc - xc + 1) + (yd - xd + 1) (yc - xc + 1) yc - xc yc xc 1 (yd - xd + 1) yd - xd yd xd 1 (comy - comx + 1) comy - comx comy comx 1 long lcm(long c, long d) {
        return c * d / gcd(c, d);
    } lcm {
        return c * d / gcd(c, d);
    } return c * d / gcd(c, d); c * d / gcd(c, d) c * d c d gcd(c, d) gcd c d long c c long d d long gcd(long c, long d) {
        if (c < d) return gcd(d, c);
        if (d == 0) return c;
        return gcd(d, c % d);
    } gcd {
        if (c < d) return gcd(d, c);
        if (d == 0) return c;
        return gcd(d, c % d);
    } if (c < d) return gcd(d, c); c < d c d return gcd(d, c); gcd(d, c) gcd d c if (d == 0) return c; d == 0 d 0 return c; c return gcd(d, c % d); gcd(d, c % d) gcd d c % d c d long c c long d d public class Main {

    Scanner sc = new Scanner(System.in);


    public static void main(String[] args) {
        new Main().run();
    }

    void run() {

        long x = sc.nextLong();
        long y = sc.nextLong();
        long c = sc.nextLong();
        long d = sc.nextLong();

        long xc = (x % c == 0) ? x / c : x / c + 1;
        long yc = y / c;
        long xd = (x % d == 0) ? x / d : x / d + 1;
        long yd = y / d;

        long lcm = lcm(c, d);

        long comx = (x % lcm == 0) ? x / lcm : x / lcm + 1;
        long comy = y / lcm;

//        System.out.println(xc);
//        System.out.println(yc);
//        System.out.println(xd);
//        System.out.println(yd);
//        System.out.println(lcm);
//        System.out.println(comx);
//        System.out.println(comy);

        System.out.println(y - x + 1 - ((yc - xc + 1) + (yd - xd + 1) - (comy - comx + 1)));


    }

    long lcm(long c, long d) {
        return c * d / gcd(c, d);
    }

    long gcd(long c, long d) {
        if (c < d) return gcd(d, c);
        if (d == 0) return c;
        return gcd(d, c % d);
    }

} public class Main {

    Scanner sc = new Scanner(System.in);


    public static void main(String[] args) {
        new Main().run();
    }

    void run() {

        long x = sc.nextLong();
        long y = sc.nextLong();
        long c = sc.nextLong();
        long d = sc.nextLong();

        long xc = (x % c == 0) ? x / c : x / c + 1;
        long yc = y / c;
        long xd = (x % d == 0) ? x / d : x / d + 1;
        long yd = y / d;

        long lcm = lcm(c, d);

        long comx = (x % lcm == 0) ? x / lcm : x / lcm + 1;
        long comy = y / lcm;

//        System.out.println(xc);
//        System.out.println(yc);
//        System.out.println(xd);
//        System.out.println(yd);
//        System.out.println(lcm);
//        System.out.println(comx);
//        System.out.println(comy);

        System.out.println(y - x + 1 - ((yc - xc + 1) + (yd - xd + 1) - (comy - comx + 1)));


    }

    long lcm(long c, long d) {
        return c * d / gcd(c, d);
    }

    long gcd(long c, long d) {
        if (c < d) return gcd(d, c);
        if (d == 0) return c;
        return gcd(d, c % d);
    }

} Main
import java.util.*;

public class Main {

    Scanner sc = new Scanner(System.in);


    public static void main(String[] args) {
        new Main().run();
    }

    void run() {

        long x = sc.nextLong();
        long y = sc.nextLong();
        long c = sc.nextLong();
        long d = sc.nextLong();

        long xc = (x % c == 0) ? x / c : x / c + 1;
        long yc = y / c;
        long xd = (x % d == 0) ? x / d : x / d + 1;
        long yd = y / d;

        long lcm = lcm(c, d);

        long comx = (x % lcm == 0) ? x / lcm : x / lcm + 1;
        long comy = y / lcm;

//        System.out.println(xc);
//        System.out.println(yc);
//        System.out.println(xd);
//        System.out.println(yd);
//        System.out.println(lcm);
//        System.out.println(comx);
//        System.out.println(comy);

        System.out.println(y - x + 1 - ((yc - xc + 1) + (yd - xd + 1) - (comy - comx + 1)));


    }

    long lcm(long c, long d) {
        return c * d / gcd(c, d);
    }

    long gcd(long c, long d) {
        if (c < d) return gcd(d, c);
        if (d == 0) return c;
        return gcd(d, c % d);
    }

}
