# 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

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

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

  

  cursor = 3

  while cursor ** 2 <= n: # リストを作成して探索範囲を先に作ってforで回す処理だと、リスト生成時の計算量やメモリ消費が多いからwhileで都度計算

    if n == 1: break # 終了条件を入れて計算量を間引く

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

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

    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

  

  if n == 1: return ans

  

  cursor = 2

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

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

  

  cursor = 3

  # リストを作成して探索範囲を先に作ってforで回す処理だと、リスト生成時の計算量やメモリ消費が多いからwhileで都度計算

  while cursor ** 2 <= n: 

    if n == 1: break

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

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

    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
    if n == 1:
        return ans
    cursor = 2
    if n % cursor == 0:
        ans += 1
    while n % cursor == 0:
        n = n // cursor
    cursor = 3
    while (
        cursor**2 <= n
    ):  # リストを作成して探索範囲を先に作ってforで回す処理だと、リスト生成時の計算量やメモリ消費が多いからwhileで都度計算
        if n == 1:
            break  # 終了条件を入れて計算量を間引く
        if n % cursor == 0:
            ans += 1
        while n % cursor == 0:
            n = n // cursor
        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
    if n == 1:
        return ans
    cursor = 2
    if n % cursor == 0:
        ans += 1
    while n % cursor == 0:
        n = n // cursor
    cursor = 3
    # リストを作成して探索範囲を先に作ってforで回す処理だと、リスト生成時の計算量やメモリ消費が多いからwhileで都度計算
    while cursor**2 <= n:
        if n == 1:
            break
        if n % cursor == 0:
            ans += 1
        while n % cursor == 0:
            n = n // cursor
        cursor += 2
    if n != 1:
        ans += 1
    return ans


if __name__ == "__main__":
    main()

-    while ( -        cursor**2 <= n -    ):  # リストを作成して探索範囲を先に作ってforで回す処理だと、リスト生成時の計算量やメモリ消費が多いからwhileで都度計算 +    # リストを作成して探索範囲を先に作ってforで回す処理だと、リスト生成時の計算量やメモリ消費が多いからwhileで都度計算 +    while cursor**2 <= n: -            break  # 終了条件を入れて計算量を間引く +            break