fun main(args : Array<String>) {
    val (A, B) = readLine()!!.split(" ").map { it.toLong() }

    val a = divisors(A).toHashSet()
    val b = divisors(B)

    var answer = 1L
    b.forEach {
        if (a.contains(it) && isPrime(it)) {
            answer++
        }
    }

    println(
            answer
    )
}

// O(√n)
fun isPrime(n: Long) : Boolean {
    for (i in 2..(Math.sqrt(n.toDouble())).toLong()) {
        // iで割れるなら素数でない
        if (n % i == 0L) {
            return false
        }
    }

    return n != 1L
}

// O(√n)
fun divisors(n: Long) : List<Long> {
    val list = mutableListOf<Long>()
    for (i in 1L..(Math.sqrt(n.toDouble())).toLong()) {
        // iで割れるならカウント
        if (n % i == 0L) {
            list.add(i)
            // iの対となるもうひとつの約数も入れる.
            if (i != n / i) {
                list.add(n / i)
            }
        }
    }

    return list
}