HDU4676 Sum Of Gcd

实战MSP-M0G3507与陶晶驰串口屏的通信协议解析 本文详细解析了MSP-M0G3507微控制器与陶晶驰串口屏的通信协议实现。内容涵盖串口配置、协议帧结构、数据校验机制及ASCII协议实战代码,重点介绍了陶晶驰串口屏的指令集应用和调试技巧,为嵌入式开发提供可靠的串口通信解决方案。 阅读详情

题意:给定一个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个因子1,其实gcd之和为2。所以要因子要乘上1个系数F[i]。

F[i]怎么求呢,假设B有n个因子,B1, B2...Bn,则F[B] + F[B1] + F[B2] + ... + F[Bn] = B。这样的话同时有K个B1,B2,... Bn时gcd之和就加上了K*B。

F[1]=1,然后可暴力求出F[i]。其实F[i] = phi[i]。

于是统计L到R之间的每个因子出现的次数即可求出答案。

因为询问太多,所以要离线处理每个询问。当把A加进区间时,对A的每个因子求答案,然后改变因子出现次数,删除时差不多。

//#pragma comment(linker, "/STACK:10240000000000,10240000000000")
#include<cstdio>
#include<cstring>
#include<climits>
#include<string>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<queue>
#include<vector>
#include<stack>
#include<map>
#include<set>
#include<stdlib.h>
using namespace std;
typedef long long ll;

void io_in_data() { freopen("data.in", "r", stdin);freopen("data1.out", "w", stdout); }

const int MAXN = 20007;
vector<int> divisor[MAXN];
int f[MAXN], a[MAXN], L[MAXN], R[MAXN], cnt[MAXN], qid[MAXN], M;
ll ans[MAXN];

void getdivisor() {
    int i, j;
    for(i = 1; i < MAXN; i++) for(j = i; j < MAXN; j += i) divisor[j].push_back(i);
}

void getf() {
    for(int i = 1; i < MAXN; i++) {
        int t = i;
        int j, sz = divisor[i].size();
        for(j = 0; j < sz; j++) t -= f[divisor[i][j]];
        f[i] = t;
    }
}

int qcmp(int x, int y) {
    int px = L[x] / M; //避免L相差不大然后R相差很大的情况
    int py = L[y] / M;
    if(px != py) return px < py;
    return R[x] < R[y];
}

ll erase(int x) {
    int i, y, sz = divisor[x].size();
    ll ret = 0;
    for(i = 0; i < sz; i++) {
        y = divisor[x][i];
        ret += 1LL*f[y]*(--cnt[y]);
    }
    return ret;
}

ll insert(int x) {
    int i, y, sz = divisor[x].size();
    ll ret = 0;
    for(i = 0; i < sz; i++) {
        y = divisor[x][i];
        ret += 1LL*f[y]*(cnt[y]++);
    }
    return ret;
}

void solve(int n, int q) {
    int i;
    for(i = 1; i <= q; i++) qid[i] = i;
    M = (int)sqrt(n*1.0);
    sort(qid+1, qid+1+q, qcmp);
    memset(cnt, 0, sizeof(cnt));
    
    int l = 0, r = 0;
    ll now = 0;
    for(i = 1; i <= q; i++) {
        int id = qid[i];
        int nl = L[id], nr = R[id];
        while(l < nl) {
            now -= erase(a[l]);
            l++;
        }
        while(l > nl) {
            l--;
            now += insert(a[l]);
        }
        while(r < nr) {
            r++;
            now += insert(a[r]);
        }
        while(r > nr) {
            now -= erase(a[r]);
            r--;
        }
        ans[id] = now;
    }
}
        
int main() {
    getdivisor();
    getf();
    int T, id = 0;
    scanf("%d", &T);
    while(T--) {
        int i, n, q;
        scanf("%d", &n);
        for(i = 1; i <= n; i++) scanf("%d", a+i);
        scanf("%d", &q);
        for(i = 1; i <= q; i++) scanf("%d%d", L+i, R+i);
        
        solve(n, q);
        
        printf("Case #%d:\n", ++id);
        for(i = 1; i <= q; i++) printf("%I64d\n", ans[i]);
    }
    return 0;
}
        


拆解爆火AI图文日报!用扣子(Coze)工作流,10分钟实现自动化新闻早报 当用户提供一则新闻内容时,仔细分析新闻中的关键信息。提取新闻事件的核心要点,包括事件主体、发生时间、地点、主要情节等。用简洁的语言对新闻进行总结,控制在[X]字以内(可根据实际需求设定字数限制)。若用户提供多条新闻,对比各新闻之间的异同点。从事件类型、影响范围、发展趋势等方面进行分析。综合总结多条新闻的整体情况,以有条理的方式呈现给用户。 阅读详情

相关推荐

别再用Excel硬算传热了!用MATLAB/Octave复现国赛数学建模A题(附完整代码与避坑指南)

本文详细介绍了如何利用MATLAB/Octave高效解决数学建模中的传热问题,替代传统的Excel计算方法。通过复现2018年国赛A题的高温作业服传热模型,从理论推导到代码实现,提供了完整的有限差分法解决方案和参数拟合技巧,帮助读者提升数学建模效率和准确性。

weixin_30512965的博客 382

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

单木的专栏 567

ICCompiler II学习笔记(一)ICC II使用全流程 overview

学习笔记同步发布在我的个人网站上,欢迎来访查看。 个人学识有限,理解可能有误,仅供参考。 文章目录一、前言二、 ICC II 简介和 GUI2.1 Blocks 和 Design Libraries2.2 Objects2.3 Application Options三、Design Setup四、APR flow五、 课程主题:如何用 ICC II来实现最好的PPA 一、前言 现在的芯片都在追求一个极致的PPA 芯片的生成可以分为以下 5大步骤: Front-end Design:前端设计,最终产生

一名FPGA芯片设计爱好者的技术博客 2万+

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

基于WEB的报价管理系统的设计与实现

该系统采用B/S模式,后台运用SpringMVC和MyBatis搭建,利用MySQL数据库,来组织存储和管理数据,使用tomcat服务器向外提供服务。使用该系统对外有利于提高企业的综合竞争力,对内有利于提高成本管理和控制的水平,简化了报价流程、提高了工作效率、精简了报价机构,降低了成本。研究和掌握必要的信息采集和数据查询技术,是各个企业,事业单位信息化的一个重要标志。当前大多数企业采取的报价方式仍然是用EXCEL表格和人工的方式,这不仅不利于大量数据的总结,更不利于对销售利润的控制。

m0_60918862的博客 1000

CentOS8静默安装Oracle11.2.0.1

背景 新安装oracle,用静默安装方式就不需要安装图形界面了,省时省力。 前期准备工作与图形化安装一样,如创建用户|用户组、环境变量、内核参数、创建目录等. 可参考图形化安装,链接:https://blog.youkuaiyun.com/heroicpoem/article/details/104229369 环境 平台 版本 操作系统 centOS 8 Oracle 11gR2 1.响应文件 响应文件的内容就是图形化安装时手工设置的选项内容。 解压后,database/response/db

heroicpoem的专栏 4520

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

任意门: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): 908Accepted Submission(s): ...

weixin_30686845的博客 142

全面指南:PyTorch与ROCm版本兼容性及多版本环境管理

本文详细介绍了在AMD GPU上配置PyTorch开发环境的完整流程,重点解决版本兼容性和多版本ROCm环境管理问题。主要内容包括:1) PyTorch与ROCm版本对应关系查询;2) 四种查看ROCm版本的方法;3) 使用update-alternatives管理多版本ROCm;4) 环境变量配置与冲突解决方案;5) 完整的验证流程和性能测试方法。文章提供了最佳实践建议和故障排除清单,帮助开发者快速搭建稳定高效的深度学习开发环境,充分发挥AMD GPU硬件性能。通过系统化的验证流程确保各组件协同工作,解决

数字人生 607

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

C++设计模式之观察者模式

观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式通常用于实现分布式事件处理系统,当一个对象(称为“主题”或“发布者”)改变状态时,所有注册的观察者都会收到通知。

每天进步一点点。 601

手把手教你学Simulink--控制执行场景实例:基于Simulink的智能车辆自动紧急制动(AEB)仿真

本文完成了基于 Simulink 的智能车辆自动紧急制动(AEB),实现了:✅ 构建前车急刹与静止障碍物典型场景✅ 设计基于 TTC 的三级 AEB 决策逻辑✅ 验证在高风险场景下有效避免碰撞✅ 掌握从风险评估到制动执行的完整安全链✅ 为ADAS 主动安全功能开发奠定基础。

MHD0815的博客 237

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

【Claude Code】Extra inputs are not permitted 报错:代理网关剥离 Beta 标头的修复

通过代理或 LLM 网关连接 Anthropic API 时,Claude Code 报 "Extra inputs are not permitted"?根因是中间件删除了 anthropic-beta 请求标头,导致 Beta 字段被 API 拒绝。本文详解标头转发配置和 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS 回退方案。

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 126

【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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

[莫比乌斯反演+莫队] 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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

莫比乌斯反演 hdu 4676 Sum Of Gcd

Sum Of Gcd Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 513    Accepted Submission(s): 222 Problem Description Given you a sequ

We Can 737

VC中sqlite的使用

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

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

HDU 4676 Sum Of Gcd【数论,数据结构(分块)】

静态区间查询,没有更新操作,瞬间就想起来了哪个O(n*sqrt(n))的做法。关键是区间转移的时候不会处理了,只能说数学拙计了…… 对于此类问题的时间复杂度分析,详见:http://blog.youkuaiyun.com/yang_7_46/article/details/9618637 买一送一,以一场多校的题目是题解给的是树状数组,其实也可以用这个算法水过,时间也挺快。 http://blog.cs

智障 3077

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

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

【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

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

hdu 4676 Sum Of Gcd 莫队+phi反演

Sum Of Gcd 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4676 Description Given you a sequence of number a1, a2, ..., an, which is a permutation of 1...n. You need to answer some queries, each with ...

weixin_34106122的博客 151

HDU 4676 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\sum_{i=L}^R\sum_{j=i+1}^Rgcd(a[i],a[j]) =\sum_{i=L}^R\sum_{j=i+1}^R\sum_{d|gcd(a[i],a[j])}\p

无限大な梦のあとの 何もない世の中じゃ 995

[数论 反演 && 莫队] hdu4676 . Sum Of Gcd

假设我们知道一个区间内数字 ii 是否出现,另它为 bib_i 推一推 ∑i=1n∑j=1ngcd(i,j)×bi×bj\sum_{i=1}^{n}\sum_{j=1}^ngcd(i,j)\times b_i\times b_j=∑Tf(T)(∑T|ibi)2=\sum_Tf(T)(\sum_{T|i}b_i)^2其中f(T)=∑d|Td×μ(Td)f(T)=\sum_{d|T}d\times

CE玩家 651

[反演 莫队算法] 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
上一篇: TwoSat
下一篇: MakingMaker ACM
MakingMaker
博客等级 码龄15年 6粉丝 108原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值