当前位置: 首页 > news >正文

SP4191 天空代码 分析

题目概述

问有多少个 \((a,b,c,d)\),在 \(n\) 个数的 \(x\) 满足 \(\gcd\{x_a,x_b,x_c,x_d\}=1\).

其中,\(n,\max x\leq 10^4\)

分析

套路经典题目,记录一下。

\(f(d)\) 表示选 \(4\) 个数,其最大公约数为 \(d\) 的倍数的个数。

\(F(d)\) 表示选 \(4\) 个数,其最大公约数为 \(d\) 的个数。

那么我们 \(f(d)\) 是好求的:

\[f(d)=C_{cnt_d}^{4} \]

我们考虑怎么通过 \(f\)\(F\),只需要考虑容斥即可。

因为我要 \(1\times d\)\(f\),再减去 \(2\times d\)\(f\),再减去 \(3\times d\)\(f\),再加上 \(6\times d\)\(f\) 等等即可。

我们发现这其实就是其分解质因数的个数,容易想到莫比乌斯函数——一个天然的容斥系数。

于是:

\[F(d)=\sum_{d\mid k}\mu(\frac{k}{d})f(k) $所以说我们求的 $F(1)=\sum_{k=1}^{mx}mu(k)f(k)$。然后直接做就行了哦。## 代码 时间复杂度 $\mathcal{O}(\sum n\sqrt n)$。 ```cpp #include <iostream> #include <cstdio> #include <cstring> #include <stdlib.h> #include <algorithm> #include <vector> #include <cmath> #define int long long #define N 10005 using namespace std; int gcd(int a,int b) {return b ? gcd(b,a % b) : a; } int calc(int x) {if (x <= 3) return 0;return x * (x - 1) * (x - 2) * (x - 3) / 24; } int prime[N]; bool vis[N]; int mu[N]; void init(int n) {mu[1] = 1;int cnt = 0;for (int i = 2;i <= n;i ++) {if (!vis[i]) prime[++cnt] = i,mu[i] = -1;for (int j = 1;j <= cnt && prime[j] * i <= n;j ++) {vis[i * prime[j]] = 1;if (i % prime[j] == 0) break;mu[i * prime[j]] = -mu[i];}} } int a[N],cnt[N],f[N]; signed main(){init(1e4);int n;int mx = 0;while(~scanf("%lld",&n)) {memset(f,0,sizeof f),memset(cnt,0,sizeof cnt);// for (int i = 0;i <= mx;i ++) f[i] = cnt[i] = 0;mx = 0;for (int i = 1;i <= n;i ++) scanf("%lld",&a[i]),mx = max(mx,a[i]);for (int i = 1;i <= n;i ++) {int x = a[i];int t = sqrt(x);for (int j = 1;j <= t;j ++)if (x % j == 0) {cnt[j] ++;if (j != x / j) cnt[x / j] ++;}}for (int i = 1;i <= mx;i ++) f[i] = calc(cnt[i]);int ans = 0;for (int i = 1;i <= mx;i ++) ans += mu[i] * f[i];printf("%lld\n",ans);// int ans = 0;// for (int i = 1;i <= n;i ++)// for (int j = i + 1;j <= n;j ++)// for (int k = j + 1;k <= n;k ++)// for (int l = k + 1;l <= n;l ++)// if (gcd(a[i],gcd(a[j],gcd(a[k],a[l]))) == 1)// ans ++;// printf("%lld\n",ans);}return 0; } ```\]

http://www.jsqmd.com/news/16954/

相关文章:

  • 大物实验
  • 又数据结构
  • 洛谷比赛做题记录
  • 【机器学习】监督学习 —— 决策树(Decision Tree) - 指南
  • 蒙特卡洛保形预测技术解析
  • [KaibaMath]1013 关于收敛数列保不等式性的证明
  • 20231408徐钰涵《密码系统设计》
  • 什么是命运(摘抄)
  • https代理服务器(五)换电脑
  • ZXK传
  • 编程指北的 C++
  • 物品复活软件开发记录 - CelestialZ
  • 螺纹钢的中线节奏
  • 2022 ICPC Hangzhou
  • KL散度
  • custom_document
  • Win11常用的bat脚本
  • 随便记
  • 历史和线段树
  • Map与Map.Entry的区别
  • 真诚
  • 申公豹说
  • 大数据分析之MySQL学习2
  • [KaibaMath]1012 关于收敛数列保号性的推论的证明
  • CSP-S模拟赛加赛 比赛总结
  • 赛前训练 12 树的直径、中心和重心
  • 我要好好写博客了 - Milo
  • [fastgrind] 一个轻量级C++内存监控及可视化开源库
  • 详细介绍:springboot+vue智慧旅游管理小程序(源码+文档+调试+基础修改+答疑)
  • iOS/Swift:深入理解iOS CoreText API