hiho 1246 && hdu 6075(17多校四09) 同余 与 最大公约数

【c/c++编程】数学类问题:同余模、最大公约数、最小公倍数、素数判定 目录同模余定理题1-求S(n)最大公约数(GCD)题2-最简真分数最小公倍数(LCM) 题3-求最小公倍数斐波那契数素数题4-判断素数题5-判定素数题6-素数判定题7-素数定义所谓的同余,顾名思义,就是许多的数被一个数 d 去除,有相同的余数。d 数学上的称谓为模。如 a = 6, b = 1, d = 5, 则我们说 a 和 b 是模 d 同余的。因为他们都有相同的余数 1 。数学上的记法为: a≡ b(mod d) 可以看出当 n < d 的时候,所有的 n 都对 d 同商,比如时钟上的小时数,都小于 阅读详情

hiho 1246 题目链接


题意:

将围成一圈的 n 个数划分为 k (1 <= k <= n) 段,对每段求和,再求这些和的最大公约数,要求最大公约数最大。


思路及详细分析见 http://blog.youkuaiyun.com/u010885899/article/details/49584299 (感谢原Po)


几个要点:

1. 每一段和的最大公约数 必然是 整体和 的最大公约数。

因为 d | a && d | b => d | (a + b)

2. 对于一个数 d,判断是否可以作为 k 段的公约数,只需要将 k 个和求个前缀和,判断有没有超过 k 个前缀和 mod d 同余。

这一点也很好理解,对于任意的 i, j (i < j), pre[i] ≡ pre[j] (mod d) => d | (pre[j] - pre[i]) = sum(i + 1, j), 将 第 i + 1 个数到 第 j 个数划为一段,则 d 整除该段的和;

对于这一串同余的数当中的第一个和最后一个,因为 d | sum1, d | sum2, ..., d | sumn, d | sum, 所以 d | (sum - sum1 - sum2 - ... - sumn),即将从最后一个同余的数往后一个位置开始,向后,再转到前面来(因为是环),一直到第一个同余的数的这些数化为一段,d 也整除该段的和

3. 从大向小枚举 d,有 k 个前缀和 mod d 同余 => 可以划分为 1~k 段。

显然,从上一次的 kmax + 1 开始划分,便保证了对于每一个划分段数 k,和都是最大的,即最大公约数。


另外,因为数据范围的问题,1<=n<=2000,1<=ai<=5e7, mod 下来的数用数组是存不下的,所以要用 map


AC代码如下:

#include <bits/stdc++.h>
#define maxn 2010
typedef long long LL;
LL pre[maxn], fac[1000010], ans[maxn], a[maxn];
using namespace std;
map<LL, LL> cnt;
bool cmp(LL a, LL b) { return a > b; }
inline LL max(LL a, LL b) { return a > b ? a : b; }
int main() {
    int n;
    scanf("%d", &n);
    scanf("%lld", &a[0]); pre[0] = a[0];
    for (int i = 1; i < n; ++i) {
        scanf("%lld", &a[i]);
        pre[i] = pre[i - 1] + a[i];
    }
    int tot = 0;
    LL sum = pre[n - 1];
    for (LL i = 1; i * i <= sum; ++i) {
        if (i * i == sum) { fac[tot++] = i; break; }
        if (sum % i == 0) fac[tot++] = i, fac[tot++] = sum / i;
    }
    sort(fac, fac + tot, cmp);
    int k = 1;
    for (int i = 0; i < tot; ++i) {
        cnt.clear();
        int maxx = 0;
        for (int j = 0; j < n; ++j) {
            int p = pre[j] % fac[i];
            if (cnt.find(p) != cnt.end()) ++cnt[p];
            else cnt.insert(make_pair(p, 1));
            maxx = max(maxx, cnt[p]);
//            printf("cnt : %d\n", cnt[p]);
        }
        while (!ans[k] && k <= maxx) ans[k++] = fac[i];
        if (k == n + 1) break;
    }
    for (int i = 1; i <= n; ++i) printf("%lld\n", ans[i]);
    return 0;
}


hdu 6075 题目链接


题意:

给定一串数 a[i], 要找 k 和 m,使得超过一半的数满足 a[i] % m == k, (m > 1, 0 <=k < m, n <= 1e5, a[i] <= 1e9)


想法是:相邻两个数做个差,得到 n - 1 个数,要使其中多于一半的数的最大公约数 > 1

(完蛋,这该怎么做;完蛋,大家怎么都会做;完蛋,这签到题啥情况)

后来学姐指点迷津,直接看奇数偶数就行了...

取 m = 2, 奇数多 k = 1, 偶数多 k = 0.

(简直想一头撞死)


AC代码如下:

#include <bits/stdc++.h>
void work() {
    int n;
    scanf("%d", &n);
    int tot = 0;
    for (int i = 0; i < n; ++i) {
        int x;
        scanf("%d", &x);
        if (x & 1) ++tot;
    }
    int m = 2, k;
    int even = n - tot;
    if (even >= tot) k = 0;
    else k = 1;
    printf("%d %d\n", m, k);
}
int main() {
    int T;
    scanf("%d", &T);
    while (T--) work();
    return 0;
}


PR工具timing report中setup time的计算过程 然后去pr工具里报告report_delay_calculation/reportDelayCalculation -from related_pin -to constraint_pin。这里constraint pin就是D pin (D0 D1 D2 D3),related pin就是 CK pin。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 阅读详情

相关推荐

给STM32 LWIP做一次‘性能体检’:手把手教你用Wireshark和iperf诊断网络瓶颈

本文详细介绍了如何使用Wireshark和iperf工具对STM32 LWIP网络性能进行全面诊断,帮助开发者精准定位网络瓶颈问题。通过搭建测试环境、集成iperf测试框架、深度报文分析和LWIP配置优化,实现从9KB/s到80MB/s的性能飞跃,特别适用于解决TCP发送速率和卡死问题。

weixin_29631169的博客 289

刷题日志(3)——最大公约数与同余原理

实际上,当我们用K位的整数进行加/减,其时间复杂度为O(K),我们当然可以认为O(32),O(64)为O(1)的时间,但乘/除?4.分析:首先 一个 int (+)/(-)/(*)/(/) int,我们可以认为其运算的时间复杂度为O(1)。为了方便说明,假设 a=2 ,b =3 , 则从1开始逐渐增多,显然第一个神奇的数字为2 ,第二个神奇数字为3,第三个为4。显然,这之中重复计算了既可以被2整除也可以被3整除的数 :200/(2。=》从一个升序数组中,找到一个值为 F(x)=100 的数。

qq_51914226的博客 985

5分钟搞定Nano-Banana图片编辑API对接:从Base64编码到生成图片全流程

本文详细介绍了如何快速对接Nano-Banana图片编辑API,基于gemini-2.5-flash-image-preview模型,从环境准备、Base64编码到API调用的全流程。通过实战示例和优化技巧,帮助开发者高效集成AI图片处理能力,提升产品竞争力。

dog123的博客 260

最大公约数,不定方程和同余方程

求解不定方程和同余方程 计算最大公约数和不定方程 计算同余方程和同余方程组 计算多项式同余方程 1.计算最大公约数和同余方程 计算最大公约数常用有辗转相除法或者是欧几里得算法。二者原理基本相似:整数a和整数b的最大公约数通过反复应用除运算,直到余数为零,最后的非零余数就是最大公约数。 欧几里得算法(辗转相除法)如下: void gcd(int a,int b) { if(b==0) return a; else return gcd(b,a%b); } 欧几里得算法数学证明: 欧几里得有个非常

安辰的博客 799

c# U盘禁用---守护进程(插入,拔出,卸载等操作)

一、简介 传统的对U盘禁用,我们多采用修改注册表的方式,详情参考:https://blog.youkuaiyun.com/qq_25372599/article/details/79815407;本文将介绍一种其他的方式–后台守护程序。其原理非常简单:当守护程序检测到U盘的插入信号,我们自动卸载U盘,致使系统无法识别U盘,达到禁用U盘的效果。 二、程序设计 2.1 变量定义 strin...

星星之火燃亮码空 2846

携程登录风控逆向踩坑实录:从滑块到点选验证码,我是如何一步步拿到phantom-token的

本文详细解析了携程登录风控系统的逆向过程,从滑块验证码到点选验证码的破解,再到设备指纹生成和加密协议逆向,最终成功获取phantom-token。文章提供了关键代码示例和实战技巧,帮助开发者理解并绕过复杂的风控机制。

weixin_28049429的博客 971

hdu 3930 Broot x^k=b%m 已知k,b,m,求所有小于m的解x m是素数

Problem Description There is a way of encryption in the Digital planet. If the number x, who lives in M area, K layer, then it will chang

kongming_acm的专栏 1390

【论文学习】《Fully-Convolutional Siamese Networks for Object Tracking》2016年SiamFC 全卷积孪生网络用于目标跟踪

在这项工作中,我们脱离了跟踪中采用的传统在线学习方法,并展示了一种专注于在离线阶段学习强嵌入的替代方法。与在分类设置中的使用不同,我们证明,对于跟踪应用,孪生全卷积深度网络能够更有效地使用可用数据。这不仅反映在测试时,通过执行有效的空间搜索,也反映在训练时,其中每个子窗口都有效地代表一个有用的样本,而几乎没有额外的成本。实验表明,深度嵌入为在线跟踪器提供了自然丰富的特征来源,并使简单的测试时策略表现良好。我们相信这种方法是对更复杂的在线跟踪方法的补充,并期望未来的工作能够更彻底地探索这种关系。

SkyLeopard的博客 2420

LeetCode OJ - Container With Most Water

Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i,

cinrry的专栏 1万+

YOLO26涨点改进 |TGRS 2026 | 全网独家改进、特征融合创新篇 | 引入CMIFE跨模态交互特征提取模块,充分挖掘互补信息,适合多模态图像融合,目标检测,实例分割,遥感图像分类高效涨点

本文提出CMIFE模块用于改进YOLO26网络模型,通过跨模态交互特征提取实现多尺度特征的精细化融合。该模块采用双注意力机制(自注意力强化模态内一致性,交叉注意力实现跨模态互补信息筛选),有效解决了传统YOLO融合中的信息冗余和负迁移问题。实验表明,CMIFE模块在保持模型实时性的同时,显著提升了小目标检测、遮挡场景等复杂环境下的检测精度。文章详细介绍了模块原理、网络结构、核心代码实现方法,并提供了三种改进版YOLO26的配置文件方案(yolo26_CMIFE-1/2/3.yaml)。

Ai缝合怪、助力小伙伴高效发论文 147

WinClaw安全实战 02|五层纵深防护体系全解析:从原理到实操,打造零风险AI智能体

2026年AI智能体爆发式普及,OpenClaw以27.3万GitHub星标成为现象级工具,但恶意Skill投毒、提示词注入、数据外泄等安全事故频发,国家互联网应急中心、工信部等多部门接连发布风险警示。威努特基于国家关键信息基础设施安全防护经验,打造WinClaw安全版AI智能体,其核心竞争力在于**五层纵深防护体系**。本文从安全痛点切入,通过真实事故案例揭示风险本质,全景解构五层防护的架构设计与技术原理,逐层拆解身份认证、安装审查、消息拦截、执行约束、监控审计的实现逻辑,搭配20+实操演示、对比表格

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 498

第十二单元 数论算法12.1 同余的性质12.2 最大公约数、最小公倍数

第十二单元 数论算法12.1 同余的性质12.2 最大公约数、最小公倍数

zhengheda的博客 747

【ubuntu24.04】auto remove后,重启,kernel panic ,please reboot your computer vfs unable to mount root fs

Ubuntu 24.04系统在运行auto remove后出现内核恐慌(kernel panic)无法启动,显示"VFS: unable to mount root fs"错误。该问题是由于当前内核被清除导致系统无法挂载根分区。解决步骤包括:1)尝试用GRUB菜单中的旧内核启动;2)在GRUB中临时编辑启动参数;3)使用Ubuntu启动盘进行chroot修复;4)使用Boot-Repair工具一键修复。成功启动后,需要重新安装linux-generic等元包,重建initramfs并更新

突围 1215

【离散数学】同余关系

相关资料来源于网络,侵删歉。 如果文章中存在错误,请下方评论告知我,谢谢! 同余关系 运算上的同余关系: 设A=&lt;S,*,Δ&gt;是一个代数系统,~是载体S上的等价关系,任取a,b,c∈S。 (1)当a~b时,若Δa~Δb,则等价关系~在一元运算Δ下是可保持的,称~是关于运算Δ的同余关系。 (2)当a~b和c~d时,若有a*c~b*d,则等价关系~在二元运算*下是可保持的,称~是关于运...

WINGREZ‘S BLOG 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

密码学基础(一)同余 最大公因数 逆元 欧拉定理

1.同余 同余的基本性质 2 最大公因数 辗转相除法求最大公因数 3 逆元 4 欧拉函数

weixin_41303815的博客 669

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

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

机试学习笔记06 -- 同余模定理、最大公约数、最小公倍数、递归

一、同余模定理 1 以下三条定理等价: (1) a 和 b 是模 d 同余的. (2) 存在某个整数 n ,使得 a = b + nd . (3) d 整除 a - b . 2 存在以下应用 (a+b)%c=(a%c+b%c)%c; (a-b)%c=(a%c-b%c)%c; (ab)%c=(a%cb%c)%c; 即相加取模等于取模相加再取模,注意里面没括号,且不适用于除法。 先把乘法取模,再把加法取模 #include<bits/stdc++.h> using namespace std;

WANFANQ的博客 619

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

HDU - 5776 同余(思维)

同余(思维) 题意:输入 n m, 下一行输入 n 个数 ;问:在该序列中是否存在连续的子序列的和可以被 m 整除? 思路:计算前缀和,并且每个前缀和对 m 取余,记录结果。若存在这样一种序列,那么取余的结果必定出现第二次,也就是说,当前取余结果若出现过,那么在出现过的那个位置到现在这个位置的区间和为 m 的整数倍。 【 (d+m ) %k=d 】 ==【 d%k =d 】 撸代码: #include<stdio.h> #include<string.h> int m

HappyCode 344

2017多校六 1002题 hdu 6097 Mindis 相似三角形 计算几何

题目链接 题意: 圆心 O 坐标(0, 0), 给定两点 P, Q(不在圆外),满足 PO = QO, 要在圆上找一点 D,使得 PD + QD 取到最小值。 官方题解: 做P点关于圆的反演点P',OPD与ODP'相似,相似比是|OP| : r。 Q点同理。 极小化PD+QD可以转化为极小化P'D+Q'D。 当P'Q'与圆有交点时,答案为两点距离

kkkkahlua的博客 1668

2017多校联合第三场 1005题 hdu 6060 RXD and dividing (超详细!!!)构造

题目链接 题意: 给定一棵 n 个节点的树,1 为根。现要将节点 2 ~ n 划分为 k 块,使得每一块与 根节点 形成的最小斯坦纳树的 边权值 总和最大。 看了题解之后的思考: 题解是:记有向边 (u, v) 长度为 w[v],以点 v 为根的子树的节点总数为 sz[v],那么答案就是 w[v] * min(sz[v], k) 对每个点求个和。 题解的说法是:可以通过构

kkkkahlua的博客 1071

HDU 3336 Count the string 所有前缀在串中的出现总次数

题目链接题意给定一个串 SS,求其所有前缀在其中的出现次数的总和。思路考虑 failfail 数组,fail[i]=jfail[i] = j 的含义是 S[0..j−1]==S[i−j..i−1]S[0..j-1] == S[i-j..i-1].记 dp[i]dp[i] 为以 ii 结尾的串中与前缀相同的串的个数。由 fail[i]=jfail[i] = j 有 S[0..j−1]==S[i−j..

kkkkahlua的博客 996

2017多校联合第二场 1009题 hdu 6053 TrickGCD (超详细!!!)莫比乌斯 容斥

题目链接 题意: Problem Description You are given an array A , and Zhu wants to know there are how many different array B satisfy the following conditions? * 1≤Bi≤Ai * For each pair( l ,

kkkkahlua的博客 898

2017多校八 1002题 hdu 6134 Battlestation Operational 艾弗森约定 莫比乌斯函数 分块

题目链接 题意: Your should calculate the total damage to the battlefield. Formally, you should compute f(n)=∑i=1n∑j=1i⌈ij⌉[(i,j)=1], where [(i,j)=1] evaluates to be 1 if gcd(i,j)=1,

kkkkahlua的博客 832

2017多校联合第一场 1006题 hdu 6038 Function 循环节

题目链接 题意: Please calculate the quantity of different functions f satisfying that f(i)=bf(ai) for each i from 0 to n−1. (嗯...就是这样) 思路: 首先可以将 a 数组划分成若干个循环节,每个节是相互独立的,取其中一个节来看,令其长度为 l

kkkkahlua的博客 805

2017多校四 1003题 hdu 6069 Counting Divisors 分解质因数

题目链接 参考:http://blog.youkuaiyun.com/protecteyesight/article/details/76685920  ——protecteyesight 题意: Problem Description In mathematics, the function d(n) denotes the number of divisors o

kkkkahlua的博客 689

2017多校九 05题 hdu 6165 FFF at Valentine 缩点 dp找最长链/拓扑排序

题目链接题意判定一个图是不是单向连通图。 // 其实就是poj 2186,不过poj的那道题数据水了些= = // 浏览题目时看成了FFT at Valentine吓死我= =思路先套路一发,tarjan求强联通分量,缩点,至此预处理完成。(这部分详细内容烦请移步本菜另一篇 强联通分量 缩点 tarjan 入门题小集) 然后怎么处理呢?法一现在我们得到了一个DAGDAG,直观想法就是有没有

kkkkahlua的博客 668

2017多校九 01题 HDU6161 Big binary tree 树形dp+hash

题目链接题意有一棵 nn (n≤1e8n\leq 1e8)个节点的完全二叉树,节点 ii 的父亲节点是 ⌊i2⌋\lfloor\frac{i}{2}\rfloor。初始时每个点的权值都是它本身。现有两种操作 mm 次(m≤1e5m\leq 1e5): 修改某个点的权值 询问 经过某个点的 权值和最大的 链 的权值和 思路dp[ ]dp[\ ] 记录从某个点向下走最长的链的权值和,修改即一路向上更新

kkkkahlua的博客 647
上一篇: 2017多校四 1011题 hdu 6077 Time To Get Up 感谢数电老师(。
下一篇: 51nod 1135 原根
kkkkahlua
博客等级 码龄12年 4粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值