HDU 4676 Sum Of Gcd 【莫队 + 欧拉】

DDR5 输入时钟抖动规范全解析!技术宅必看 简单说,时钟抖动就是时钟信号边沿的“颤抖”——信号本来应该在某个固定时间跳变,但实际时刻可能会前后波动。这种波动可能是随机的,也可能是确定性的。随机抖动(Random Jitter, Rj):符合高斯分布,像是你家猫咪不经意的晃动。确定性抖动(Deterministic Jitter, Dj):受限于特定周期或模式,像是邻居装修时的规律敲击声。⚠️ 注意,如果时钟抖动超出规格,DDR5可能无法正确接收或发送数据,内存错误、系统崩溃可就跟着来了! 阅读详情

任意门:http://acm.hdu.edu.cn/showproblem.php?pid=4676

Sum Of Gcd

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 908    Accepted Submission(s): 438


Problem Description
Given you a sequence of number a 1, a 2, ..., a n, which is a permutation of 1...n.
You need to answer some queries, each with the following format:
Give you two numbers L, R, you should calculate sum of gcd(a[i], a[j]) for every L <= i < j <= R.
 

 

Input
First line contains a number T(T <= 10),denote the number of test cases.
Then follow T test cases.
For each test cases,the first line contains a number n(1<=n<= 20000).
The second line contains n number a 1,a 2,...,a n.
The third line contains a number Q(1<=Q<=20000) denoting the number of queries.
Then Q lines follows,each lines contains two integer L,R(1<=L<=R<=n),denote a query.
 

 

Output
For each case, first you should print "Case #x:", where x indicates the case number between 1 and T.
Then for each query print the answer in one line.
 

 

Sample Input
1
5
3 2 5 4 1
3
1 5
2 4
3 3
 

 

Sample Output
Case #1:
11
4
0
 

 

Source

 

 

题意概括:

给出 1~N 的一个排列,M次查询,每次查询 L ~ R 内 GCD( ai, aj )  [ L <= i < j <= R ] 的总和。

 

解题思路:

又是涉及 GCD 又是 涉及区间查询,头有点大。

首先莫队处理区间查询,其次欧拉函数解决GCD问题。

根据:

 

那么用 gcd( ai, aj) 代替上式的 n,我们可以得到:

 

问题就转换成了求 d 的欧拉函数,其实 d 是有很多重复的,那么我们只要统计出当前查询区间【L,R】内 d 出现的次数然后乘上其欧拉函数值,所求的的答案就是区间GCD的总和。

欧拉函数值和对原序列的每一项的因数分解预处理时搞定。

 

AC code:

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <cstring>
 5 #include <vector>
 6 #include <cmath>
 7 #define INF 0x3f3f3f3f
 8 #define LL long long
 9 using namespace std;
10 
11 const int MAXN = 2e4+20;
12 int unit, a[MAXN], N, M, cnt[MAXN];
13 LL ans[MAXN], phi[MAXN];
14 vector<int>factor[MAXN];
15 
16 struct Query
17 {
18     int l, r, idx;
19     friend bool operator < (const Query & a, const Query & b){
20         int x1 = a.l/unit, x2 = b.l/unit;
21         if(x1 != x2) return x1 < x2;
22         return a.r < b.r;
23     }
24 }Q[MAXN];
25 
26 void init()
27 {
28     for(int i = 1; i < MAXN; i++){      //分解因子
29         for(int j = i; j < MAXN; j+=i)
30             factor[j].push_back(i);
31     }
32 
33     phi[1] = 1;                         //欧拉函数
34     for(int i = 2; i < MAXN; i++){
35         phi[i] = i;
36     }
37     for(int i = 2; i < MAXN; i++){
38         if(phi[i] == i){
39             for(int j = i; j < MAXN; j+=i)
40                 phi[j] = phi[j]/i*(i-1);
41         }
42         //puts("zjy");
43     }
44 }
45 
46 LL add(int x)
47 {
48     LL res = 0;
49     for(auto d : factor[x]) res+=cnt[d]*phi[d];
50     for(auto d : factor[x]) cnt[d]++;
51     return res;
52 }
53 
54 LL del(int x)
55 {
56     LL res = 0;
57     for(auto d : factor[x]) cnt[d]--;
58     for(auto d : factor[x]) res+=cnt[d]*phi[d];
59     return -res;
60 }
61 
62 
63 void solve()
64 {
65     memset(cnt, 0, sizeof(cnt));
66     int L = 1, R = 0;
67     LL cur = 0;
68     for(int i = 1; i <= M; i++){
69         while( L < Q[i].l) cur += del(a[L++]);
70         while( L > Q[i].l) cur += add(a[--L]);
71         while( R < Q[i].r) cur += add(a[++R]);
72         while( R > Q[i].r) cur += del(a[R--]);
73         ans[Q[i].idx] = cur;
74         //puts("zjy");
75     }
76 }
77 
78 int main()
79 {
80     int T_Case, Cas = 0;
81     init();
82     //puts("zjy");
83     scanf("%d", &T_Case);
84     while(T_Case--){
85         scanf("%d", &N);
86         for(int i = 1; i <= N; i++) scanf("%d", &a[i]);
87         scanf("%d", &M);
88         for(int i = 1; i <= M; i++){
89             scanf("%d %d", &Q[i].l, &Q[i].r);
90             Q[i].idx = i;
91         }
92         unit = sqrt(N);
93         sort(Q+1, Q+1+M);
94         solve();
95         printf("Case #%d:\n", ++Cas);
96         for(int i = 1; i <= M; i++) printf("%lld\n", ans[i]);
97     }
98     return 0;
99 }

 

Android AVB 分析(十二)嵌入式设备安全中的 dm-verity 简介 上一篇 《Android AVB 分析(十一)bootloader 是如何进行 verify boot 检查的?》 分析了 bootloader 中是如何调用 libavb 函数库验证 vbmeta 和 boot 等分区的。接下来就打算写一篇介绍 dm-verity 原理的文章,然后再写一篇徒手 dm-verity 实践的文章,结果偶然发现了本篇的英文原版。写得太好,我觉得自己完全没有必要再写原理了。由于原文是英文,有些英语不太好的朋友不一定能完全理解。我花了点时间,结合 AI 将英语原文翻译成中文。 阅读详情

相关推荐

STK传感器约束设置保姆级教程:从方位角到传播延迟,手把手教你避开新手常见坑

本文详细解析了STK传感器约束设置的关键技巧,涵盖方位角、仰角、高度及传播延迟等核心参数。通过实战案例和代码示例,指导用户避开常见误区,优化卫星通信和航天任务仿真精度,特别适合STK新手和需要提升传感器配置效率的工程师。

weixin_33701294的博客 393

hdu4676 Sum Of Gcd

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4676题目大意:∑Ri=L∑Rj=i+1gcd(a[i],[j])\sum_{i=L}^{R}\sum_{j=i+1}^{R}gcd(a[i],[j])解题思路:用莫队算法优化,同时用到一个技巧:一个数n与一个集合中每个数的最大公约数的和=∑d∣nphi(d)∗num(d)=\sum_{d\mid n}p

单木的专栏 566

别再乱调栅极电阻了!手把手教你用示波器调试FOC驱动MOS管,避开EMC和震荡坑

本文详细介绍了FOC驱动中MOS管栅极参数的精准调试方法,涵盖示波器配置、波形特征分析及栅极电阻选型策略。通过实战案例和工程经验,帮助工程师有效解决EMC和震荡问题,提升驱动电路稳定性和效率。

weixin_28728495的博客 503

HDU - 4676 Sum Of Gcd 莫比乌斯+莫队

题目链接 : 点这里 题意:给了一个数列a,然后给了一个区间[L, R],然后要求 sigma(gcd(i, j)), L <= i < j <= R。 解题方法: 令g(l, r) = sigma(gcd(i, j)), L <= i < j <= R.举个栗子,当a[L:R] = {4, 5, 8}时, 答案是1 + 1 + 4 = 6。由于最大公约数本身的定义,我们可以猜想多个数的gcd

I good vegetable a! 1042

超详细MySQL 8.0安装与配置

MySQL的安装与配置 还不会安装MySQL的同学们,还不会配置MySQL的同学们,赶紧按照下面步骤操作起来,超详细安装步骤如下: 进入MySQL官网 1、点击download 2、点击MySQL Community Server 3、选好选项点击go to download page 4、点击download 5、点击no thanks,just start my download 6、选Server only,点击Next 7、点击Execute 8、点击

Turniper的博客 8759

使用 MATLAB/Simulink + Simscape Electrical,构建一个含储能的微电网系统,实现储能系统与并网逆变器的协同控制

摘要:本文基于Simulink平台,详细介绍了微电网中储能系统与并网逆变器的协同控制建模与仿真方法。主要内容包括:1)构建包含光伏、风电、锂电池和双向DC-DC变换器的微电网系统;2)设计并网逆变器的PQ/Vf双模式控制策略;3)实现储能系统与逆变器的协同控制逻辑,包括SOC保护和功率分配;4)通过多种工况仿真验证系统性能。结果表明,该系统能有效维持微电网稳定运行,支持并网/离网无缝切换。文章还探讨了优化方向和应用扩展,为新能源微电网控制提供了实用参考。

xiaoheshang_123的博客 102

HDU 4676 Sum Of Gcd(分组)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4676 题意:给出一个n的数列A,A的元素为1到n的一个排列。若干询问。每次查询区间[L,R],输出: 思路:设区间[L,R]内所有数字中有num[d]个数字有因子d,那么直观上想的话我们觉得答案应该加上: 因为这num[d]个数中每两个数的Gcd都有可能是d。但是这样又是不对的,比如区间...

weixin_33895516的博客 438

openbmc mctp i3c适配步骤

本文介绍了在Intel OKS平台下,BMC作为I3C从设备如何适配MCTP over I3C的实现方法。主要内容包括:1)关键术语解释,如MDB(Mandatory Data Byte)值为0xAE,DCR(Device Characteristics Register)和BCR(Bus Characteristics Register)的设置;2)适配流程说明,包括BMC作为控制器主节点分配地址后成为MCTP端点,CPU作为总线所有者的角色转换;3)测试验证步骤,展示通过mctp-client工具发送指

wit_yuan的专栏 132

HDU4676 Sum Of Gcd (数论 + 分块)

来看答案怎么求?  ∑i=LR∑j=i+1Rgcd(a[i],a[j])=∑i=LR∑j=i+1R∑d|gcd(a[i],a[j])ϕ(d)=∑dϕ(d)∑i=L,d|a[i]R∑j=i+1,d|a[j]R1 后一项就是[L,R]这段区间内有多少个d的倍数。  cnt[d][x]代表前x项中d的倍数的个数。  原式可化为  ∑i=LR∑j=i+1Rgcd(a[i],a

Dizzy的专栏 571

Qt C++ 的虚拟演播室系统

**数据流转**:OpenCV 处理的图像格式通常是 `cv::Mat`,而 Qt 3D 渲染需要 `QImage` 或 `QTexture2D`。// 临时用颜色代替。// 前景在背景前面。#### 3.3 主窗口与 Qt 3D 集成 (`mainwindow.h` / `.cpp` / `.ui`)* **更复杂的 3D 场景**:加载 3D 模型(.obj, .gltf 等)作为背景和道具。1. **构建项目**:确保 `.pro` 文件中的 OpenCV 路径配置正确,然后构建项目。

寒寒豆豆软件公司的博客 113

JavaScript高级程序设计

作者:禅与计算机程序设计艺术 1.简介 JavaScript(简称JS)是一种直截了当、简单易用的动态脚本语言。它最初由Netscape公司的Brendan Eich(布兰登·艾奇)于1995年创建,但后来逐渐成为事实上的通用编程语言。目前,JS已经成为世界上最流行的客户端脚本语言,广泛用于网页开发、移

AI天才研究院 2268

【HDU4676】Sum Of Gcd(莫队+欧拉函数)

点此看题面 大致题意: 多组询问,求\(\sum_{i=L}^R\sum_{j=i+1}^Rgcd(i,j)\)。 推式子 这道题我们可以考虑,每个因数\(d\)被统计答案的次数,肯定与其出现次数有关。 设它出现次数为\(cnt_d\),则可以猜测答案为: \[\sum_{d=1}^nd\cdot C_{cnt_d}^2\] 这显然是错的,因为\(d\)虽作为公因数,却不一定是最大公约数。 所以就...

weixin_30352191的博客 142

YOLO26改进策略【Neck】| ICCV2025 反向卷积 Converse2D 数学逆运算提重构 + 特征域建模降伪影,提升多尺度目标检测精度

本文记录的是利用Converse2D 算子改进 YOLO26 的上采样。(Converse 2D Convolution)通过正则化最小二乘闭式解与深度化空间建模结合,实现YOLO26特征提取与上采样阶段的卷积逆运算及特征精准重构。本文利用算子,通过闭式解的非迭代计算还原卷积下采样后的原始特征,再通过可学习核与自适应正则化参数稳定逆问题求解,同时依托圆形填充与插值初始估计保留特征高频细节,对YOLO26中不同尺度检测目标的特征进行针对性重构强化、抑制卷积/转置卷积带来的伪影与信息损失干扰,在特征融合与上采样

Limiiiing的博客 656

Sum Of Gcd HDU 4676 (莫队)

Sum Of Gcd Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 986 Accepted Submission(s): 465 Problem Description Given you a sequence of numb...

king9666的博客 199

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

HDU 4676 Sum Of Gcd(欧拉函数求区间gcd之和+分块算法)

HDU 4676 Sum Of Gcd题意: 给一个数列a,以及一些询问[L,R] ,求每一个询问的 ∑L≤i<j≤Rgcd(i,j)\sum_{L\leq i < j \leq R} \gcd(i,j) 思路:令S(L,R)=∑L≤i<j≤Rgcd(i,j)S(L,R)=\sum_{L\leq i < j \leq R} \gcd(i,j) 例如,当 a[L:R]={4,5,8}a[L:R]

a novice 1910

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[莫比乌斯反演+莫队] HDU4676 Sum Of Gcd

反演的过程类似这题 ,得 ∑T=1nϕ(T) cnt[T]2 \sum_{T=1}^n \phi(T)\ cnt[T] ^2 cnt[T]cnt[T] 表示当前区间内是 TT 的倍数的数的个数。 因为有 cntcnt,每次直接求肯定不行,可以想到莫队。移动过程中每次暴力维护 cntcnt 即可。 复杂度理论很大,但实际上能过。#include<cstdio> #include<cmath>

Lynstery's blog 565

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【HDU 4676 Sum Of Gcd】莫队算法

HDU4676 题意就是求某个区间内两两gcd之和。 关于一个区间内两两GCD之和,我们有一个推导: 对一个序列的某个区间L,R,每个数两两之间的GCD之和为Σd|nφ(d)×C2num(d)Σd|nφ(d)×Cnum(d)2 \varSigma _{d|n}\varphi \left( d \right) \times C_{num\left( d \right)}^{2} d在这里指...

lajiyuan的博客 461

Sum Of Gcd HDU - 4676(莫队)

Given you a sequence of number a 1, a 2, …, a n, which is a permutation of 1…n. You need to answer some queries, each with the following format: Give you two numbers L, R, you should calculate sum

Coldfresh的博客 399

HDU4676 Sum Of Gcd

题意:给定一个n的排列,询问L到R之间任意两个数的gcd之和 以下是解题报告的思路,解题报告看了n久才看懂, 记一下,以免以后忘记了~~ 对于L到R之间的一个数A,如果数A的一个因子B在L到R之间出现了K次,则结果加上K*F[B]。例如4有因子2,出现了K次,加上K*F[2]。 当然A有因子B,则A有B的因子C,又要加上K*F[C]。 假如A有因子2,除去A之外,L到R还有有1个因子2,1个

MakingMaker的专栏 2130

hdu 4676 Sum Of Gcd

离线+分块!! 思路:序列a[1],a[2],a[3]……a[n] num[i]表示区间[L,R]中是i的倍数的个数;euler[i]表示i的欧拉函数值。 则区间的GCD之和sum=∑(C(num[i],2)*euler[i]).当增加一个数时,若有约数j,则只需加上num[j]*euler[j],之后再num[j]++; 反之亦然!! 代码如下: 1 #includ...

weixin_30256505的博客 93

【HDU4676】Sum Of Gcd-莫队算法+欧拉函数

测试地址:Sum Of Gcd 题目大意:给定一个111~nnn的全排列AAA,若干个询问,每次询问给出一个区间[l,r][l,r][l,r],要求得出∑l≤i&lt;j≤rgcd(Ai,Aj)∑l≤i&lt;j≤rgcd(Ai,Aj)\sum_{l\le in=∑d|nφ(d)n=∑d|nφ(d)n=\sum_{d|n}\varphi(d) 那么有: ∑l≤i&lt;j≤rgcd(Ai,A...

Maxwei_wzj的OI世界 389

Sum Of Gcd(hdu 4676)

Sum Of Gcd Time Limit: 10000/5000 MS (Java/Others)Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 738Accepted Submission(s): 333 Problem Description Given you a sequen...

weixin_30778805的博客 152

[反演 莫队算法] HDU 4676 Sum Of Gcd

考虑对一堆数求一个gcd 我们记录每一个约数xx的出现次数num[x]num[x] 那么两两间gcd的和是什么呢 ∑x∗C2num[x]\sum x*C_{num[x]}^2 肯定不是 这样会有重复 猜想f(x)f(x)是关于x的函数 ∑f(x)∗C2num[x]\sum f(x)*C_{num[x]}^2 那么应该满足 ∑d|xf(d)=x\sum_{d|x} f(d)=x 因为

雯舞 515

hdu 4676 分块

给定一个1-N的全排列序列,N

老李2009 616

ACM数论基础 详细整理

目录 质数 质数的判定 试除法 MillerRobbin(米勒罗宾素数测试) 素数筛法 埃氏筛 线性筛 区间筛 Prime Distance HDU6069 Counting Divisors(区间分解质因数) 阶乘分解 ural1055Combinations 约数 算术基本定理的扩展 数值分块 BZOJ1257余数之和 BZOJ2956模积和 最大...

qcwlmqy的博客 1421

HDU - 4676 Sum Of Gcd(莫比乌斯反演+莫队)

传送门 题目大意 给出数组aaa是nnn的排列,给定l,rl,rl,r,求出区间[al,ar][a_l,a_r][al​,ar​]所有的∑i=lr∑j=lrgcd(ai,aj)\sum_{i=l}^{r} \sum_{j=l}^{r} gcd(a_i,a_j)∑i=lr​∑j=lr​gcd(ai​,aj​) 解题思路 在莫比乌斯反演那里学到了这个公式:n=∑d∣nφ(d)n=\sum_{d|n}\varphi(d)n=∑d∣n​φ(d) 代入后得:∑i=lr∑j=lr∑d∣gcd(i,j)φ(d)\su

Happig的博客 305
上一篇: POJ 1845 Sumdiv 【二分 || 逆元】
下一篇: BZOJ 3289: Mato的文件管理 【莫队 + 树状数组】
莜莫oO
博客等级 码龄9年 7粉丝 226原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值