- 问题转化为C(n, 4) - num
- 发现num = sum (-mu[i]) * C(cnt[i], 4)
- 这时候就可以预处理mu以及C来求解,cnt[i]可以刷表法递推
(填表:由谁来,刷表:到谁去)
| #include <bits/stdc++.h> |
| using namespace std; |
| const int N = 1e4 + 10; |
| #define lowbit(x) (x & (-x)) |
| #define endl '\n' |
| #define int long long |
| #define pii pair<int, int> |
| #define mkp make_pair |
| #define LL long long |
| int n, k, m, mu[N], p[N], tot, C[N], w[N], a[N]; |
| bool flg[N]; |
| void getMu() { |
| mu[1] = 1; |
| for (int i = 2; i < N; ++i) { |
| if (!flg[i]) p[++tot] = i, mu[i] = -1; |
| for (int j = 1; j <= tot && i * p[j] < N; ++j) { |
| flg[i * p[j]] = 1; |
| if (i % p[j] == 0) { |
| mu[i * p[j]] = 0; |
| break; |
| } |
| mu[i * p[j]] = -mu[i]; |
| } |
| } |
| } |
| void solve() |
| { |
| for (int i = 1; i <= n; i++) cin >> a[i], w[a[i]]++; |
| LL num = 0; |
| for (int i = 1; i <= 1e4; i++) { |
| for (int j = i * 2; j <= 1e4; j += i) { |
| w[i] += w[j]; |
| |
| } |
| } |
| |
| for (int i = 1; i <= 1e4; i++) { |
| if (w[i] >= 4) num += mu[i] * C[w[i]]; |
| } |
| for (int i = 0; i <= 1e4; i++) w[i] = 0; |
| cout << num << endl; |
| } |
| |
| signed main() |
| { |
| ios::sync_with_stdio(false); |
| cin.tie(nullptr); |
| |
| getMu(); |
| for (int i = 4; i <= 10000; i++) { |
| C[i] = i * (i - 1) * (i - 2) * (i - 3) / (2 * 3 * 4); |
| } |
| int T = 1; |
| |
| while (cin >> n) { |
| solve(); |
| } |
| return 0; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现