import math
A, B = map(int, input().split())


def prime_factorize(n):
    a = [1]
    while n % 2 == 0:
        a.append(2)
        n //= 2
    f = 3
    while f * f <= n:
        if n % f == 0:
            a.append(f)
            n //= f
        else:
            f += 2
    if n != 1:
        a.append(n)
    a.sort()
    return a

#「公約数は最大公約数の約数」
# ans = 最大公約数の素因数の個数

# A,Bの最大公約数
temp = math.gcd(A, B)
# 最大公約数を素因数分解する
temp = prime_factorize(temp)
# setにして重複除く
temp = set(temp)
# 長さを取得
ans = len(list(temp))

print(ans) import math math A, B = map(int, input().split()) A map(int, input().split()) map int input().split() ().split () input split B def prime_factorize(n):
    a = [1]
    while n % 2 == 0:
        a.append(2)
        n //= 2
    f = 3
    while f * f <= n:
        if n % f == 0:
            a.append(f)
            n //= f
        else:
            f += 2
    if n != 1:
        a.append(n)
    a.sort()
    return a

#「公約数は最大公約数の約数」
# ans = 最大公約数の素因数の個数

# A,Bの最大公約数 prime_factorize a = [1] a [1] 1 while n % 2 == 0:
        a.append(2)
        n //= 2
     n % 2 == 0 n % 2 n 2 0 a.append(2) a.append a append 2 n //= 2 n 2 f = 3 f 3 while f * f <= n:
        if n % f == 0:
            a.append(f)
            n //= f
        else:
            f += 2
     f * f <= n f * f f f n if n % f == 0:
            a.append(f)
            n //= f
        else:
            f += 2
     n % f == 0 n % f n f 0 a.append(f) a.append a append f n //= f n f f += 2 f 2 if n != 1:
        a.append(n)
     n != 1 n 1 a.append(n) a.append a append n a.sort() a.sort a sort return a a n n temp = math.gcd(A, B) temp math.gcd(A, B) math.gcd math gcd A B temp = prime_factorize(temp) temp prime_factorize(temp) prime_factorize temp temp = set(temp) temp set(temp) set temp ans = len(list(temp)) ans len(list(temp)) len list(temp) list temp print(ans) print ans temp = set(temp) set(temp) temp A, B = map(int, input().split()) map(int, input().split()) A B = map(int, input().split()) map(int, input().split()) B temp = math.gcd(A, B) math.gcd(A, B) temp temp = prime_factorize(temp) prime_factorize(temp) temp def prime_factorize(n):
    a = [1]
    while n % 2 == 0:
        a.append(2)
        n //= 2
    f = 3
    while f * f <= n:
        if n % f == 0:
            a.append(f)
            n //= f
        else:
            f += 2
    if n != 1:
        a.append(n)
    a.sort()
    return a

#「公約数は最大公約数の約数」
# ans = 最大公約数の素因数の個数

# A,Bの最大公約数 def prime_factorize(n):
    a = [1]
    while n % 2 == 0:
        a.append(2)
        n //= 2
    f = 3
    while f * f <= n:
        if n % f == 0:
            a.append(f)
            n //= f
        else:
            f += 2
    if n != 1:
        a.append(n)
    a.sort()
    return a

#「公約数は最大公約数の約数」
# ans = 最大公約数の素因数の個数

# A,Bの最大公約数 prime_factorize ans = len(list(temp)) len(list(temp)) ans
import math
A, B = map(int, input().split())


def prime_factorize(n):
    a = [1]
    while n % 2 == 0:
        a.append(2)
        n //= 2
    f = 3
    while f * f <= n:
        if n % f == 0:
            a.append(f)
            n //= f
        else:
            f += 2
    if n != 1:
        a.append(n)
    a.sort()
    return a

#「公約数は最大公約数の約数」
# ans = 最大公約数の素因数の個数

# A,Bの最大公約数
temp = math.gcd(A, B)
# 最大公約数を素因数分解する
temp = prime_factorize(temp)
# setにして重複除く
temp = set(temp)
# 長さを取得
ans = len(list(temp))

print(ans)
