SP4191 天空代码 分析

news/2025/10/19 22:31:53/文章来源:https://www.cnblogs.com/high-sky/p/19151551

题目概述

问有多少个 \((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.mzph.cn/news/940671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

应用安全 --- 安卓加固 之 vdex转dex

应用安全 --- 安卓加固 之 vdex转dexodex是安卓8之后新的dex优化方案,可以将java字节码转换为底层汇编指令提升执行效率。转化方法 安装转化app(https://qyma.lanzoui.com/b04yht1md),使用mt管理器将你要转换到的v…

大物实验

另:大物实验是真的费时间

洛谷比赛做题记录

SCP-J 2025 T3 P14259 兄妹(siblings) 每一列的书交给一个人来放是最优的。预处理出每一列的总步数 \(v_i\)。 同时处理横坐标和纵坐标的步数非常不便。我们发现两个人 \(X,Y\) 里面一定有一个横坐标最大会去到最后一…

【机器学习】监督学习 —— 决策树(Decision Tree) - 指南

【机器学习】监督学习 —— 决策树(Decision Tree) - 指南2025-10-19 22:18 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

蒙特卡洛保形预测技术解析

本文详细介绍了蒙特卡洛保形预测方法,探讨了在标注存在不确定性时的校准问题。内容涵盖代码实现、理论推导、多标签分类应用,以及如何通过数据增强改进校准过程,为机器学习中的不确定性估计提供实用解决方案。代码和…

[KaibaMath]1013 关于收敛数列保不等式性的证明

[KaibaMath]1013 关于收敛数列保不等式性的证明收敛数列的保不等式性描述了数列项的不等式关系可"传递"至其极限,但请注意不等式的"非严格性"。下面给出相应的证明。

20231408徐钰涵《密码系统设计》

20231408徐钰涵《密码系统设计》 第五周预习报告 学习内容《Windows C/C++加密解密实战》第 7 章 课程 mindmapAI对学习内容的总结 总结数字签名的核心作用身份认证:确认信息发送者的身份。 数据完整性:确保信息在传…

什么是命运(摘抄)

什么是命:就是当你遇到一件事以你的性格,一定会这么做 什么是运:就是当你遇到一件事以你的性格,一定会这么做,但你却没有 from: 抖音@拾月

https代理服务器(五)换电脑

https代理服务器(五)换电脑1 brew install mkcert mkcert -CAROOT 没有2 mkcert -install mkcert -CAROOT 有了3 启动MyFiddler,手机连接,失败4 拷贝原key和证书至root目录 再次mkcert -install5 好了

ZXK传

ZXK传HZOI的机房的格局,是和别处不同的:都是当街一个曲尺形的大门,门里面五楼预备着主机,可以随时上洛谷。学OI的人,傍午傍晚散了学,每每花四个小时,打一场模拟赛,——这是CSP的事,NOIP每场要涨到四个半小时,…

编程指北的 C++

sizeof 可用于任意类型 / 变量,strlen 仅用于以 \0 结尾的字符串 结果:sizeof 含结束符 / 对齐填充,strlen 仅计有效字符(不含 \0)

物品复活软件开发记录 - CelestialZ

ver1.0 计划 背景: 大学生经常有些物品觉得扔掉可惜,不处理又觉得占据自己的地方。请你编写一个物品“复活”软件,让大家可以在网上赠送/卖物品 需求:该程序允许添加物品信息(物品名称,物品描述,联系人信息) 删…

螺纹钢的中线节奏

赶底的节奏 不过还有下跌空间 看到2676附近

2022 ICPC Hangzhou

2022 ICPC Hangzhou A 令初始序列的和为 \(sum\),则最后的和是 \(sum + ns + {n(n + 1) \over 2}d\),我们令 \(f(x) = (sum + x) \% m, x \in [0, m)\),显然这是一个分段函数,令 \(x = y\) 时,\(f(x) = 0\)。当 \…

KL散度

有两个概率分布:真实分布 P(x):世界的真实规律;模型分布 Q(x):我们模型预测的结果。 KL 散度衡量的就是这两个分布之间的“距离”:\(D_{KL}(P||Q) = \sum_{x}^{}{P(x)log\frac{P(x)}{Q(x)}}\). 越接近 0 → 模型越…

custom_document

custom_documentfrom llama_index.core import Document from typing import Dict, Any, Optional, List from pydantic import Field import jsonclass CustomDocument(Document):"""自定义文档类,扩…

Win11常用的bat脚本

win11常用的bat脚本1.移除桌面显示的了解此图片图标: @echo offREM REF// https://www.cnblogs.com/Chary/p/18096583reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesk…

随便记

要退役了,所以还是强迫自己写一些做题记录 10-14 新歌发了 CF 1049 C: 没啥好讲,记住在博弈中先手有时可以直接模仿后手操作抵消影响 10-15 看直播了 CF 1049 E: DP整体朴素,学一个通过 \(\ge or \le x\) 的答案差分…

历史和线段树

我们一般在处理区间修改的操作时,会在线段树上打懒标记,意思是这个结点所代表的区间中的所有数都要同时进行一系列修改。为了更容易理解历史和线段树,我们先来回顾一下普通线段树的区间加操作。 \(\mathbf{Preperat…