use std::collections::HashMap; const MOD: usize = 1e9 as usize + 7; fn gcd(a: usize, b: usize) -> usize { if b == 0 { return a; } gcd(b, a%b) } fn main() { let mut nk = String::new(); std::io::stdin().read_line(&mut nk).ok(); let nk: Vec = nk.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let n = nk[0]; let k = nk[1]; let mut a = String::new(); std::io::stdin().read_line(&mut a).ok(); let a: Vec = a.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let mut dp = HashMap::new(); dp.insert(1usize, 1usize); for i in 0..n { let mut next_dp = HashMap::new(); for (&key, &cnt) in dp.iter() { *next_dp.entry(key).or_insert(0usize) += cnt; *next_dp.entry(key).or_insert(0usize) %= MOD; let nkey = gcd(a[i], k); let nkey = gcd(nkey * key, k); *next_dp.entry(nkey).or_insert(0usize) += cnt; *next_dp.entry(nkey).or_insert(0usize) %= MOD; } dp = next_dp; } if k == 1 { println!("{}", dp.get(&k).unwrap_or(&0usize) - 1); } else { println!("{}", dp.get(&k).unwrap_or(&0usize)); } }