。。。。。。。
又WA又T一时爽
一开始以为O(nloga)过不了。。。。。。
后来发现。。。。。。是把小数据的时间也给用上了。。。。
bzoj的评测时间比较神奇。。。。。
直接像筛一样搞就行了。CF里面似乎很多这种题。
Hn=∑nk=1nk=O(nlogn)
直接统计
一开始T了之后YY了各种不靠谱的方法。。。比如先筛质数然后f[i]+=f[pri[j]∗i]等等。。。真是naiive…
咦那status里面他们是怎么做到空间这么小的……?
#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define per(i,a,b) for(int i=a;i>=b;i--)
inline int rd() {
char c = getchar();
while (!isdigit(c)) c = getchar() ; int x = c - '0';
while (isdigit(c = getchar())) x = x * 10 + c - '0';
return x;
}
const int maxm = 2000001;
const int maxn = 20000000;
typedef long long ll;
int n , cnt[maxn + 1] , mx , x;
void input() {
n = rd();
rep(i , 1 , n) cnt[x = rd()] ++ , mx = std::max(x , mx);
}
void solve() {
ll ans = 0;
rep(i , 1 , mx) {
ans += (ll)(cnt[i] - 1) * (cnt[i]);
for(int j = i + i;j <= mx;j += i) ans += (ll)cnt[j] * cnt[i];
}
printf("%lld\n" , ans);
}
int main() {
#ifndef ONLINE_JUDGE
// freopen("data.txt" , "r" , stdin);
#endif
input();
solve();
return 0;
}