#include #define rep(i,n) for(int i=0;i<(n);i++) using namespace std; using lint=long long; vector divisors(long long a){ vector res; for(long long i=1;i*i<=a;i++) if(a%i==0) { res.emplace_back(i); if(i*i a(n); rep(i,n) scanf("%d",&a[i]); vector D; rep(i,n) for(lint d:divisors(a[i])) D.emplace_back(d); sort(D.begin(),D.end()); D.erase(unique(D.begin(),D.end()),D.end()); int m=D.size(); vector dp(m); // dp[i] = (gcd が D[i] になる部分列の総数) for(int i=m-1;i>=0;i--){ int cnt=0; rep(j,n) if(a[j]%D[i]==0) cnt++; dp[i]=(1LL<