Problem:
Score : 400 points

Problem Statement

Given are positive integers A and B.

Let us choose some number of positive common divisors of A and B.

Here, any two of the chosen divisors must be coprime.

At most, how many divisors can we choose?

Definition of common divisor

An integer d is said to be a common divisor of integers x and y when d divides both x and y.

Definition of being coprime

Integers x and y are said to be coprime when x and y have no positive common divisors other than 1.

Definition of dividing

An integer x is said to divide another integer y when there exists an integer \alpha such that y = \alpha x.

Constraints

All values in input are integers.

1 \leq A, B \leq 10^{12}

Input

Input is given from Standard Input in the following format:

A B

Output

Print the maximum number of divisors that can be chosen to satisfy the condition.

Sample Input 1

12 18

Sample Output 1

3

12 and 18 have the following positive common divisors: 1, 2, 3, and 6.

1 and 2 are coprime, 2 and 3 are coprime, and 3 and 1 are coprime, so we can choose 1, 2, and 3, which achieve the maximum result.

Sample Input 2

420 660

Sample Output 2

4

Sample Input 3

1 2019

Sample Output 3

1

1 and 2019 have no positive common divisors other than 1.

Solution in Lua (5.3.2) (judge verdict: Accepted)

local DBG = true
local function dbgpr(...)
    if DBG then
        io.write("[dbg]")
        print(...)
    end
end

local function dbgpr_t(tbl, use_pairs)
    if DBG then
        local enum = ipairs
        if use_pairs then
            enum = pairs
        end
        dbgpr(tbl)
        io.write("[dbg]")
        for i,v in enum(tbl) do
            io.write(i)
            io.write(":")
            io.write(tostring(v))
            io.write(" ")
        end
        print("")
    end
end
local function factorize(n)
    local nn = n
    local lst = {}
    for i = 2, math.floor(n ^ 0.5) do
        k = 0
        while nn % i == 0 do
            k = k + 1
            nn = nn // i
            table.insert(lst, i)
        end
    end
    if nn ~= 1 then
        table.insert(lst, nn)
    end
    return lst
end

local A, B = io.read("n","n")
local f1 = factorize(A)
local f2 = factorize(B)
local s1 = {}
for _,v in ipairs(f1) do
    s1[v] = true
end
local s2 = {}
for _,v in ipairs(f2) do
    s2[v] = true
end
local smul = {1}
for k,_ in pairs(s1) do
    if s2[k] then
        table.insert(smul, k)
    end
end
print(#smul)