# 1. 最大公約数を求める(ユークリッドの互除法)

# 2. 最大公約数を2と3以上の奇数で順次割っていくする（下から計算したら、素数判定は不要）

# 3. 2.の結果に含まれる数の種類の数＋１が答え



def main():

  a, b = list(map(int, input().split()))

  while b != 0: a, b = b, a % b #最大公約数を求める

  print((num_facto(a) + 1))  

  

def num_facto(n):

  ans = 0

  max_n = int(n ** 0.5) + 1

  if n == 1: return ans

  two_and_odds = [2] + [x for x in range(3, max_n, 2) if x ** 2 <= n]

  for cursor in two_and_odds:

    if n == 1: break

    if n % cursor == 0: ans += 1

    while n % cursor == 0: n = n // cursor

  if n != 1: ans += 1

  return ans



if __name__ == "__main__":

  main()

# 1. 最大公約数を求める(ユークリッドの互除法)

# 2. 最大公約数を2と3以上の奇数で順次割っていくする（下から計算したら、素数判定は不要）

# 3. 2.の結果に含まれる数の種類の数＋１が答え



def main():

  a, b = list(map(int, input().split()))

  while b != 0: a, b = b, a % b #最大公約数を求める

  print((num_facto(a) + 1))  

  

def num_facto(n):

  ans = 0

  if n == 1: return ans

  cursor = 2

  while cursor ** 2 <= n:

    if n == 1: break

    if n % cursor == 0: ans += 1

    while n % cursor == 0: n = n // cursor

    cursor = 3 if cursor == 2 else (cursor + 2)

  if n != 1: ans += 1

  return ans



if __name__ == "__main__":

  main()

# 1. 最大公約数を求める(ユークリッドの互除法)
# 2. 最大公約数を2と3以上の奇数で順次割っていくする（下から計算したら、素数判定は不要）
# 3. 2.の結果に含まれる数の種類の数＋１が答え
def main():
    a, b = list(map(int, input().split()))
    while b != 0:
        a, b = b, a % b  # 最大公約数を求める
    print((num_facto(a) + 1))


def num_facto(n):
    ans = 0
    max_n = int(n**0.5) + 1
    if n == 1:
        return ans
    two_and_odds = [2] + [x for x in range(3, max_n, 2) if x ** 2 <= n]
    for cursor in two_and_odds:
        if n == 1:
            break
        if n % cursor == 0:
            ans += 1
        while n % cursor == 0:
            n = n // cursor
    if n != 1:
        ans += 1
    return ans


if __name__ == "__main__":
    main()

# 1. 最大公約数を求める(ユークリッドの互除法)
# 2. 最大公約数を2と3以上の奇数で順次割っていくする（下から計算したら、素数判定は不要）
# 3. 2.の結果に含まれる数の種類の数＋１が答え
def main():
    a, b = list(map(int, input().split()))
    while b != 0:
        a, b = b, a % b  # 最大公約数を求める
    print((num_facto(a) + 1))


def num_facto(n):
    ans = 0
    if n == 1:
        return ans
    cursor = 2
    while cursor**2 <= n:
        if n == 1:
            break
        if n % cursor == 0:
            ans += 1
        while n % cursor == 0:
            n = n // cursor
        cursor = 3 if cursor == 2 else (cursor + 2)
    if n != 1:
        ans += 1
    return ans


if __name__ == "__main__":
    main()

-    max_n = int(n**0.5) + 1 -    two_and_odds = [2] + [x for x in range(3, max_n, 2) if x ** 2 <= n] -    for cursor in two_and_odds: +    cursor = 2 +    while cursor**2 <= n: +        cursor = 3 if cursor == 2 else (cursor + 2)