hdu 4961 枚举约数O(n*sqrt(n))

快速枚举因子(约数) 求数n的最小的约数r,使r满足性质P,这些性质满足这样的一个条件:若有d|r满足性质P,则有r也满足P 。 首先O(n√) 直接暴力枚举因数显然可行,然而我们有更快的方法。 设n=pk11pk22…pkmm 我们先从大到小枚举数w1 ,使其成为最小的w1使得t=pw11pk22…pkmm满足P 。 再枚举w2 ,使其成为最小的w2使得t=pw11pw22…pkmm满足P 。 阅读详情

Boring Sum

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 1099    Accepted Submission(s): 517


Problem Description
Number theory is interesting, while this problem is boring.

Here is the problem. Given an integer sequence a 1, a 2, …, a n, let S(i) = {j|1<=j<i, and a j is a multiple of a i}. If S(i) is not empty, let f(i) be the maximum integer in S(i); otherwise, f(i) = i. Now we define bi as a f(i). Similarly, let T(i) = {j|i<j<=n, and a j is a multiple of a i}. If T(i) is not empty, let g(i) be the minimum integer in T(i); otherwise, g(i) = i. Now we define c i as a g(i). The boring sum of this sequence is defined as b 1 * c 1 + b 2 * c 2 + … + b n * c n.

Given an integer sequence, your task is to calculate its boring sum.
 

Input
The input contains multiple test cases.

Each case consists of two lines. The first line contains an integer n (1<=n<=100000). The second line contains n integers a 1, a 2, …, a n (1<= a i<=100000).

The input is terminated by n = 0.
 

Output
Output the answer in a line.
 

Sample Input
  
5 1 4 2 3 9 0
 

Sample Output
  
136
Hint
In the sample, b1=1, c1=4, b2=4, c2=4, b3=4, c3=2, b4=3, c4=9, b5=9, c5=9, so b1 * c1 + b2 * c2 + … + b5 * c5 = 136.
 

Author
SYSU
 

Source
 

Recommend

f[i]是a[i]左边最近的倍数的下标,g[i]是a[i]右边最近的倍数的下标。

用h[k],记录k的倍数上次出现的位置。求f[i]时,从左往右扫,扫到a[i]时,f[i]=h[a[i]],并且枚举出a[i]所有约数j,更新h[j]=h[a[i]/j]=i.因为枚举约数复杂度为O(sqrt(n)),对于10^5的数据,O(n*sqrt(n))能在规定时间内完成。


#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

#define maxn 100001
int f[maxn],g[maxn],a[maxn];
int h[maxn];

int main()
{
    int n;
    while(~scanf("%d", &n) && n){
        for(int i = 1; i <= n; i++)
            scanf("%d", a+i);

        memset(h, 0, sizeof(h));

        for(int i = 1; i <= n; i++){
            f[i] = h[a[i]]? h[a[i]]:i;

            for(int j = 1; j*j <= a[i]; j++)
            if(a[i]%j == 0){
                h[a[i]/j] = h[j] = i;
            }
        }

        memset(h,0,sizeof(h));
        for(int i = n; i > 0; i--){
            g[i] = h[a[i]]?h[a[i]]:i;

            for(int j = 1; j*j <= a[i]; j++)
            if(a[i]%j == 0){
                h[a[i]/j]=h[j] = i;
            }
        }

        long long ans = 0;
        for(int i =1; i <= n; i++)
            ans += (long long)a[f[i]]*a[g[i]];
        printf("%I64d\n", ans);
    }
    return 0;
}



COMSOL求解器实战:如何避免非线性问题求解失败(附牛顿法调试技巧) 本文深入探讨了COMSOL求解器在处理非线性问题时常见的失败原因及解决方案。通过分析物理模型非线性特性、初始条件敏感性和求解器参数配置,提供了牛顿法调试的黄金四步法,包括模型检查、分阶段求解、参数调优和高级诊断工具应用。特别针对材料非线性、几何非线性和多物理场耦合等典型工程场景,给出了实战技巧和预防性建模策略,帮助工程师有效避免求解失败。 阅读详情

相关推荐

开源CC6920差分霍尔电流传感器模块实战指南——从选型到波形分析

本文详细介绍了CC6920差分霍尔电流传感器模块的选型、硬件连接、参数计算及波形分析技巧。通过实战案例,展示了该开源硬件在电流测量中的优势,包括超低内阻、电气隔离和抗干扰能力,适用于电机控制、开关电源保护等场景。

weixin_28738397的博客 376

如何枚举约数?

约数,又称因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。

Jerry_qbw的博客 734

【暂时完结】Prescan学习笔记

Prescan学习记录1. Prescan基础知识1.1 Conventions·坐标1.2 Road segment·道路片段1.2.1 让一个路段连接其他两个路段1.2.2 配置车道线1.2.3 Road marking·道路标志1.3 Trajectory·轨迹1.3.1 建立一个Path·路径1.3.2 配置Speedprofile1.3.3 Synchronization of Trajectories·轨迹同步1.3.4 Multiple trajectories · 多轨迹分配 1. Pres

dreautumn的博客 1万+

数论(三)——约数(约数个数,约数和,公约数)

目录试除法求约数求约数个数约数之和欧几里得算法 试除法求约数 试除法求一个数的所有约数,思路与判断质数的思路一样,优化的方法也是一样的,这里就不再赘述,没有看过我之前关于质数的博客可以点这里。 从小到大枚举所有约数,但是我们只需要枚举每一对儿中较小的一个就可以了。 时间复杂度:O(sqrt(n)) vector<int> get_divisors(int n) { vector<int> res; //vector数组存储一个数的所有约数 for(int i =

灯火阑珊_ 9002

IEEE GRSL投稿全流程避坑指南:从Latex模板到校样缴费,新手必看的7个关键节点

本文详细解析了IEEE GRSL投稿全流程中的7个关键节点,从LaTeX模板选择到校样缴费,帮助新手避免常见陷阱。特别针对图像格式转换、审稿意见回复、版权转移等环节提供实用技巧,确保投稿过程高效顺利。

weixin_28720573的博客 567

Windows下用VS2022编译libcurl全流程(含openssl配置避坑指南)

本文详细介绍了在Windows平台使用Visual Studio 2022编译libcurl库的完整流程,重点解决了集成OpenSSL支持HTTPS功能时的常见配置难题。从环境准备、源码获取、依赖编译到工程配置,提供了清晰的步骤和针对非默认安装路径的避坑指南,帮助开发者高效完成网络库的集成工作。

weixin_29291185的博客 245

快速计算约数的个数——从基础到高级

题目来源:【欧拉计划第 12 题】 高度可除的三角数 Highly divisible triangular number 这道题我们在枚举完三角数后,最重要的是去判断何时某个三角数约数的个数大于 500500500 下面我们来看下,针对计算约数的个数问题,不同的算法 ...

董哲朋的博客 5万+

基于 VS Code + CMake + Make + GNU工具链 + OpenOCD 的通用MCU开发环境搭建教程

以CH32V307(RISCV)和STM32F103(Cortex-M3)为例的Vscode+gnu单片机环境搭建。

余十三_的博客 2173

欧拉函数、欧拉定理、费马小定理(附例题)

欧拉函数 欧拉函数的两种求法: ACWING873欧拉函数 给定 n 个正整数 ai ,请你求出每个数的欧拉函数。 欧拉函数的定义 输入格式 第一行包含整数 n 。 接下来 n 行,每行包含一个正整数 ai 。 输出格式 输出共 n 行,每行输出一个正整数 ai 的欧拉函数。 数据范围 1≤n≤100 , 1≤ai≤2×109 输入样例: 3 3 6 8 输出样例: 2 2 4 AC代码: #include <bits/stdc++.h> using namespac

阳光的博客 1922

从开通VPS到搭建宝塔面板全教程

你在输入域名(此时我们可能没有类似aaa.com这样的域名,所以要输入VPS的IP地址)的时候,下面的根目录也会跟着变动,等输入完成后,你可以把根目录再改回成/www/wwwroot/dq。这时,在你的浏览器中,输入外网面板地址的URL,输入username和password,即可登陆宝塔面板。第一次登陆,需要绑定你的宝塔账号,你可以到宝塔的注册界面,用手机注册一个,然后绑定,首先看一下你的VPS操作系统是什么类型的(其实你在选择VPS的时候,就已经选定了,我选择的事Centos系统)。

kxltsuperr的专栏 3731

【GameFramework框架内置模块】8、文件系统(File System)

最近好忙,鸽了好久。不能颓废了,继续发力。今天分享的是GF框架的文件系统。首先,引用比较官方的说法:GF的FileSystem虚拟文件系统,使用类似磁盘存储的感念对零散的文件进行集中管理,优化资源加载时产生的内存分配,也可以对资源进行局部片段加载,极大的提升了资源加载的性能。通俗点讲就是,我这个模块就是加载磁盘文件的,优化加载时产生的内存分配。那么,它是怎么优化的呢?

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2451

【算法设计-枚举、分治】素数、约数、质因数分解

【算法设计-枚举、分治】素数、约数、质因数分解

Mount256的博客 896

RK3588高速接口实战-PCIE

摘要: RK3588的PCIe接口支持PCIe 3.0x4和PCIe 2.1x1/x2,具备Root Complex和Endpoint模式,适用于NVMe SSD、5G模块等高速设备。硬件设计需注意85Ω/100Ω阻抗匹配、220nF AC耦合电容及100MHz参考时钟。设备树需配置控制器节点、PHY模式和IOMMU映射(RC模式用iommu-map,EP模式用iommus)。调试时可通过lspci检查链路状态,dmesg查看训练日志,perf分析性能。常见问题包括设备识别失败(检查复位时序、PHY配置)、

weiyvyy的博客 500

HDU4961——Boring Sum(数论)

Boring Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)   Total Submission(s): 215    Accepted Submission(s): 103 Problem Description Number theory

Reverie 403

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

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

老版QQ原生表情gif动态

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

4083 最大公约数(枚举技巧)

1. 问题描述: 给定一个长度为 n 的整数序列 a1,a2,…,an。请你从中选出尽可能多的数。要求满足如下两个条件之一: 仅选择一个数; 选择至少两个数,且所选择的数的最大公约数大于 1; 输出选出数的最大可能数量。 输入格式 第一行包含整数 n。第二行包含 n 个整数 a1,a2,…,an。 输出格式 一个整数,表示选出数的最大可能数量。 数据范围 前 6 个测试点满足 1 ≤ n ≤ 10。 所有测试点满足 1 ≤ n ≤ 10 ^ 5,1 ≤ ai ≤ 10 ^ 5。 输入样例1:

二哈 551

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

最高科技——快速枚举约数

求数\(n\)的最小的约数\(r\),使\(r\)满足性质\(P\),这些性质满足这样的一个条件:若有\(d|r\)满足性质\(P\),则有\(r\)也满足\(P\)。 首先\(O(\sqrt{n})\)直接暴力枚举因数显然可行,然而我们有更快的方法。 设\(n=p_1^{k_1}p_2^{k_2}\ldots p_m^{k_m}\) 我们先从大到小枚举数\(w_1\),使其成为最小的\(w...

weixin_34203426的博客 385

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

本原串 (思维+快速幂+枚举约数)

本原串 由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n&lt;=100000000)的本原串? 答案mod2008. 例如,100100不是本原串,因为他是由两个100组成,而1101是本原串。 Input 输入包括多个数据,每个数据一行,包括一个整数n,代表串的长度。 Output 对于每个测试数据,输出一行,代表有多少...

codeswarrior的博客 478

hdu4983 / 枚举约数+欧拉函数

求满足 gcd(a,n)*acd(b,n)=n^k的整数对(a,b)。n 特殊情况考虑一下(n=1,k>=2),问题很容易转化为求euter(n/g)*euter(g),g是约数。这题比赛时候竟然应该不会求n的约数二不会做! 求约数时候,枚举(1,根号n),另一半对应啊!欧拉函数,这次有改进。 #include #include #include using namespace std; l

天羽屠龙舞 1193

200. Hankson的趣味题 DFS枚举约数 试除法枚举所有质因子和它的次数

题目 题解思路 x肯定是b1的约数,所以从这里入手(我是想不到)。 直接枚举所有约数如果符号上面的条件就可以作为答案。 根号D2e3 这样的话复杂度大概5e42e3 大概1亿左右,这样是很有可能超时的。 时间复杂度已经接近了,只要稍微优化一下就行了。 大概在5e3*2e3 1e7 筛出质数后。 我们直接枚举所有质数,以及它的次数。 我们只在D的质因子下枚举。 这样直接用dfs暴力枚举出它的约数,约数个数(这一步可以减少大量dfs的次数)不会超过1600的。dfs的次数最多1600,所以可以忽略复杂度。

从你的全世界路过 239

【枚举约数】HackerRank - Week of Code 26 - Satisfactory Pairs

题意:给你一个正整数n,问你存在多少个正整数对a,b(a<b),满足条件:存在正整数x,y,使得ax+by=n。 就预处理出n以内所有数的约数,然后暴力枚举a,暴力枚举x,然后枚举n-ax的所有约数,判重,统计答案即可。 #include<cstdio> #include<vector> #include<algorithm> using n...

weixin_33893473的博客 176

BZOJ 1968 - 枚举约数

枚举1..n的每个数x,加上它对答案的贡献n/x即可。 // BZOJ 1968 #include using namespace std; int n, ans; int main() { scanf("%d", &n); for(int i=1; i<=n; i++) ans+=n/i; printf("%d\n", ans); return 0;

yearwhk的博客 823

[Luogu2424] 约数和 [数论分块]

[Link\frak{Link}Link] 什么是除法分块? 例题 求以NNN为被除数,在[0,N][0,N][0,N]的范围内,将所得的商向下取整相同的所有除数区间。N∈[0,109]N∈[0,10^9]N∈[0,109] 很显然应该考虑维护除数区间的左、右端点。怎么更新? 首先设L,RL,RL,R。初始化L=R=1L=R=1L=R=1。 显然更新的时候L′=R+1L&amp;amp;amp;amp;amp;amp;amp;amp;amp;#x27...

最后一次修改 591

求最大公约数

求最大公约数 输入两个数a和b,输出它们的最大公约数 输入:12 18 输出:6 int main() { //枚举法; //1.设t=2; //2.如果u和v都能被t整除,则记下这个t //3.t加1后重复第2步,直到t等于u或v //4.那么,曾经记下的最大的可以同时整除u和v的t就是gcd //枚举法效率不高,因为要尝试所有的数 in...

weixin_45087108的博客 170

【枚举约数】Gym - 101412A - Ginkgo Numbers

给你一堆定义,问你在那个定义下,<p,q>是不是素数。其实那堆定义都不用管,只要看最下面给你的提示即可。 根据,只要把m^2+n^2当一个整体,去枚举(p^2+q^2)的约数即可,然后再枚举m, 这样的枚举出来是必要的,然后再根据这个充要条件判一下即可。 #include<cstdio> #include<cmath> using namespac...

weixin_33852020的博客 194

分块入门9:P4168 区间众数查询O(n*sqrt(n))

题目链接:https://www.luogu.org/problemnew/show/P4168 题目大意: 思路一: 在线区间众数的分块做法比较多,这里提供一个思路: 首先离散化一下比较方便。 可以推导出:[L, R]的众数一定是整数块的众数,或者两个边块的数。 所以对于每次查询,众数的可能值最多有2sqrt(n)+1个 所以我们可以预处理f(i,j)表示第 i 块到第 j 块的众数(枚举 ...

H_ang的博客 488

约数枚举与整数分解 2018-2-11

# include &lt;cstdio&gt; # include &lt;cstdlib&gt; # include &lt;cmath&gt; # include &lt;cstring&gt; # include &lt;string&gt; # include &lt;iostream&gt; # include &lt;iomanip&gt; # include &lt;alg

ACM 298
上一篇: poj 1821 dp+单调队列
下一篇: hdu 3507 斜率优化dp入门
HuanTongH
博客等级 码龄12年 7粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值