← Home
package main

import (
	"bufio"
	"os"
	"strconv"
)

func nextInt64(r *bufio.Reader) (int64, error) {
	var sign int64 = 1
	var val int64 = 0
	b, err := r.ReadByte()
	for err == nil && (b < '0' || b > '9') && b != '-' {
		b, err = r.ReadByte()
	}
	if err != nil {
		return 0, err
	}
	if b == '-' {
		sign = -1
		b, err = r.ReadByte()
		if err != nil {
			return 0, err
		}
	}
	for err == nil && b >= '0' && b <= '9' {
		val = val*10 + int64(b-'0')
		b, err = r.ReadByte()
	}
	return val * sign, nil
}

func gcd(a, b int64) int64 {
	if a < 0 {
		a = -a
	}
	if b < 0 {
		b = -b
	}
	for b != 0 {
		a, b = b, a%b
	}
	return a
}

func countDivisors(n int64) int64 {
	if n == 1 {
		return 1
	}
	var res int64 = 1
	var cnt int64
	for n%2 == 0 {
		cnt++
		n /= 2
	}
	if cnt > 0 {
		res *= (cnt + 1)
	}
	var p int64 = 3
	for p*p <= n {
		cnt = 0
		for n%p == 0 {
			cnt++
			n /= p
		}
		if cnt > 0 {
			res *= (cnt + 1)
		}
		p += 2
	}
	if n > 1 {
		res *= 2
	}
	return res
}

func main() {
	r := bufio.NewReaderSize(os.Stdin, 1<<20)
	w := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer w.Flush()

	n64, err := nextInt64(r)
	if err != nil {
		return
	}
	n := int(n64)
	var g int64 = 0
	for i := 0; i < n; i++ {
		x, _ := nextInt64(r)
		g = gcd(g, x)
	}
	ans := countDivisors(g)
	w.WriteString(strconv.FormatInt(ans, 10))
	w.WriteByte('\n')
}