from math import sqrt


def is_prime(n):
    for i in range(2, int(sqrt(n))+1):
        if n % i == 0:
            return False

    return True


def make_divisors(a, b):
    lower_divisors = []
    upper_divisors = []

    i = 1
    n = min(a, b)
    m = max(a, b)

    while i*i <= n:
        if n % i == 0:
            # 大きい方の数が割れるか確認
            if m % i == 0:
                # 素数であるか確認
                if is_prime(i):
                    lower_divisors.append(i)

            # 割り切れる場合 i で割った数も約数
            if i != n // i:

                # i で割った数で大きいほうが割り切れるか
                if m % (n // i) == 0:

                    # 素数であるか
                    if is_prime(n//i):
                        upper_divisors.append(n//i)
        i += 1

    return lower_divisors + upper_divisors[::-1]


def main():
    A, B = [int(x) for x in input().split()]
    divisors = make_divisors(A, B)
    print(len(divisors))


if __name__ == '__main__':
    main() from math import sqrt def is_prime(n):
    for i in range(2, int(sqrt(n))+1):
        if n % i == 0:
            return False

    return True is_prime for i in range(2, int(sqrt(n))+1):
        if n % i == 0:
            return False

     i range(2, int(sqrt(n))+1) range 2 int(sqrt(n))+1 int(sqrt(n)) int sqrt(n) sqrt n 1 if n % i == 0:
            return False

     n % i == 0 n % i n i 0 return False False return True True n n def make_divisors(a, b):
    lower_divisors = []
    upper_divisors = []

    i = 1
    n = min(a, b)
    m = max(a, b)

    while i*i <= n:
        if n % i == 0:
            # 大きい方の数が割れるか確認
            if m % i == 0:
                # 素数であるか確認
                if is_prime(i):
                    lower_divisors.append(i)

            # 割り切れる場合 i で割った数も約数
            if i != n // i:

                # i で割った数で大きいほうが割り切れるか
                if m % (n // i) == 0:

                    # 素数であるか
                    if is_prime(n//i):
                        upper_divisors.append(n//i)
        i += 1

    return lower_divisors + upper_divisors[::-1] make_divisors lower_divisors = [] lower_divisors [] upper_divisors = [] upper_divisors [] i = 1 i 1 n = min(a, b) n min(a, b) min a b m = max(a, b) m max(a, b) max a b while i*i <= n:
        if n % i == 0:
            # 大きい方の数が割れるか確認
            if m % i == 0:
                # 素数であるか確認
                if is_prime(i):
                    lower_divisors.append(i)

            # 割り切れる場合 i で割った数も約数
            if i != n // i:

                # i で割った数で大きいほうが割り切れるか
                if m % (n // i) == 0:

                    # 素数であるか
                    if is_prime(n//i):
                        upper_divisors.append(n//i)
        i += 1

     i*i <= n i*i i i n if n % i == 0:
            # 大きい方の数が割れるか確認
            if m % i == 0:
                # 素数であるか確認
                if is_prime(i):
                    lower_divisors.append(i)

            # 割り切れる場合 i で割った数も約数
            if i != n // i:

                # i で割った数で大きいほうが割り切れるか
                if m % (n // i) == 0:

                    # 素数であるか
                    if is_prime(n//i):
                        upper_divisors.append(n//i)
         n % i == 0 n % i n i 0 if m % i == 0:
                # 素数であるか確認
                if is_prime(i):
                    lower_divisors.append(i)

            # 割り切れる場合 i で割った数も約数
             m % i == 0 m % i m i 0 if is_prime(i):
                    lower_divisors.append(i)

            # 割り切れる場合 i で割った数も約数
             is_prime(i) is_prime i lower_divisors.append(i) lower_divisors.append lower_divisors append i if i != n // i:

                # i で割った数で大きいほうが割り切れるか
                if m % (n // i) == 0:

                    # 素数であるか
                    if is_prime(n//i):
                        upper_divisors.append(n//i)
         i != n // i i n // i n i if m % (n // i) == 0:

                    # 素数であるか
                    if is_prime(n//i):
                        upper_divisors.append(n//i)
         m % (n // i) == 0 m % (n // i) m n // i n i 0 if is_prime(n//i):
                        upper_divisors.append(n//i)
         is_prime(n//i) is_prime n//i n i upper_divisors.append(n//i) upper_divisors.append upper_divisors append n//i n i i += 1 i 1 return lower_divisors + upper_divisors[::-1] lower_divisors + upper_divisors[::-1] lower_divisors upper_divisors[::-1] upper_divisors ::-1 -1 a a b b def main():
    A, B = [int(x) for x in input().split()]
    divisors = make_divisors(A, B)
    print(len(divisors)) main int(x) for x in input().split() for x in input().split() x input().split() ().split () input split for x in input().split() int(x) int x A, B = [int(x) for x in input().split()] A [int(x) for x in input().split()] B divisors = make_divisors(A, B) divisors make_divisors(A, B) make_divisors A B print(len(divisors)) print len(divisors) len divisors if __name__ == '__main__':
    main() __name__ == '__main__' __name__ '__main__' main() main def make_divisors(a, b):
    lower_divisors = []
    upper_divisors = []

    i = 1
    n = min(a, b)
    m = max(a, b)

    while i*i <= n:
        if n % i == 0:
            # 大きい方の数が割れるか確認
            if m % i == 0:
                # 素数であるか確認
                if is_prime(i):
                    lower_divisors.append(i)

            # 割り切れる場合 i で割った数も約数
            if i != n // i:

                # i で割った数で大きいほうが割り切れるか
                if m % (n // i) == 0:

                    # 素数であるか
                    if is_prime(n//i):
                        upper_divisors.append(n//i)
        i += 1

    return lower_divisors + upper_divisors[::-1] def make_divisors(a, b):
    lower_divisors = []
    upper_divisors = []

    i = 1
    n = min(a, b)
    m = max(a, b)

    while i*i <= n:
        if n % i == 0:
            # 大きい方の数が割れるか確認
            if m % i == 0:
                # 素数であるか確認
                if is_prime(i):
                    lower_divisors.append(i)

            # 割り切れる場合 i で割った数も約数
            if i != n // i:

                # i で割った数で大きいほうが割り切れるか
                if m % (n // i) == 0:

                    # 素数であるか
                    if is_prime(n//i):
                        upper_divisors.append(n//i)
        i += 1

    return lower_divisors + upper_divisors[::-1] make_divisors def main():
    A, B = [int(x) for x in input().split()]
    divisors = make_divisors(A, B)
    print(len(divisors)) def main():
    A, B = [int(x) for x in input().split()]
    divisors = make_divisors(A, B)
    print(len(divisors)) main def is_prime(n):
    for i in range(2, int(sqrt(n))+1):
        if n % i == 0:
            return False

    return True def is_prime(n):
    for i in range(2, int(sqrt(n))+1):
        if n % i == 0:
            return False

    return True is_prime
from math import sqrt


def is_prime(n):
    for i in range(2, int(sqrt(n))+1):
        if n % i == 0:
            return False

    return True


def make_divisors(a, b):
    lower_divisors = []
    upper_divisors = []

    i = 1
    n = min(a, b)
    m = max(a, b)

    while i*i <= n:
        if n % i == 0:
            # 大きい方の数が割れるか確認
            if m % i == 0:
                # 素数であるか確認
                if is_prime(i):
                    lower_divisors.append(i)

            # 割り切れる場合 i で割った数も約数
            if i != n // i:

                # i で割った数で大きいほうが割り切れるか
                if m % (n // i) == 0:

                    # 素数であるか
                    if is_prime(n//i):
                        upper_divisors.append(n//i)
        i += 1

    return lower_divisors + upper_divisors[::-1]


def main():
    A, B = [int(x) for x in input().split()]
    divisors = make_divisors(A, B)
    print(len(divisors))


if __name__ == '__main__':
    main()
