BZOJ 1607
-
题目
-
分析
本题可以暴力的去找每个数的因子,看一下它的因子在序列的出现的次数,再做统计。时间复杂度: O ( n × m ) O(n \times \sqrt{m}) O(n×m) 洛谷上 A C AC AC B Z O J BZOJ BZOJ 老爷机上就 T L E TLE TLE 了。
变换思路:
类似埃氏筛的方法,统计数的倍数出现的次数。注意:去除自己本身的答案。
-
代码
int maxn = 0; for (int i = 1; i <= n; i++) { read(a[i]); vis[a[i]]++; maxn = max(maxn, a[i]); } for (int i = 1; i <= maxn; i++) { if (vis[i] == 0) continue; for (int j = i; j <= maxn; j += i) ans[j] += vis[i]; } for (int i = 1; i <= n; i++) { printf("%d\n", ans[a[i]] - 1); }
-
题型
埃氏筛思想 o r or or 暴力找因子