use std::cmp::{min, max}; fn gcd(a: usize, b: usize) -> usize { if a % b == 0 { return b; } gcd(b, a % b) } fn main() { let mut n = String::new(); std::io::stdin().read_line(&mut n).ok(); let n: usize = n.trim().parse().unwrap(); let mut a: Vec = vec![]; for _ in 0..n { let mut atemp = String::new(); std::io::stdin().read_line(&mut atemp).ok(); let atemp: usize = atemp.trim().parse().unwrap(); a.push(atemp); } let mut result: usize = 0; for i in 0..n { for j in i+1..n { let temp = gcd(max(a[i], a[j]), min(a[i], a[j])); if temp == 1 { result += n - 1 - j; continue; } for k in j+1..n { if gcd(max(temp, a[k]), min(temp, a[k])) == 1 { result += 1; } } } } println!("{}", result); }