UVA294 约数 Divisors 题解
Content
给定 \(n\) 个区间 \([l,r]\),求出每个区间内约数个数最大的数。
数据范围:\(1\leqslant l<r\leqslant 10^{10}\),\(r-l\leqslant 10^4\)。
Solution
你可能需要在做这题目前了解一下约数个数定理。何谓约数个数定理?
设一个数 \(x\) 的个数可以分解为若干个质因数相乘的积,即:
\]
那么 \(x\) 的约数个数 \(f(x)\) 有一个这样的式子:
\]
如何证明?很简单,我们由约数定义可知,\(p_1^{a_1}\) 的约数有:\(p_1^0,p_1^1, p_1^2,\dots,p_1^{a_1}\),共 \(a_1+1\) 个。同理 \(p_2^{a_2}\) 的约数有 \(a_2+1\) 个……以此类推,\(p_k^{a_k}\) 的约数有 \(a_k+1\) 个。因此,由乘法原理可知,\(x\) 的约数个数就是 \((a_1+1)(a_2+1)\dots(a_k+1)=\prod\limits_{i=1}^k(a_i+1)\)。
那么思路就非常清晰明了了:
- 预处理出 \(\sqrt{10^{10}}\) 以内的所有质数,可以用埃氏筛也可以用线性筛。
 - 注意到 \(r-l\leqslant 10^4\),因此我们考虑直接从 \(l\) 到 \(r\) 枚举每一个数。
 - 枚举每一个数时,我们枚举每一个质数,一旦发现这个质数是当前枚举到的数的因子,我们就不断地将当前枚举的数除以这个质因子,直到这个质数不再是当前述的因子为止。
 - 设我们除了 \(num\) 次,然后我们往当前枚举的数的约数个数(初始化为 \(1\))去乘 \(num+1\)。当前数的质因子分解完了以后再和当前的答案比较,并更新答案。
 
Code
namespace Solution {
	int cnt, isprime[100007], prime[100007];
	iv ai_prime() {
		F(int, i, 2, 100000) isprime[i] = 1;
		F(int, i, 2, 100000) if(isprime[i]) Fo(int, j, i * 2, 100000, i) isprime[j] = 0;
		F(int, i, 2, 100000) if(isprime[i]) prime[++cnt] = i;
	}
	iv Main() {
		ai_prime();
		MT {
			ll l = Rll, r = Rll, ans = 0, res = l;
			F(ll, i, l, r) {
				ll p = i, num = 1;
				for(int j = 1; j <= cnt && prime[j] <= p; ++j) {
					ll t = 0;
					while(prime[j] && !(p % prime[j])) p /= prime[j], t++;
					num *= (t + 1);
				}
				if(num > ans) res = i, ans = num;
			}
			printf("Between %lld and %lld, %lld has a maximum of %lld divisors.\n", l, r, res, ans);
		}
		return;
	}
}
												
											UVA294 约数 Divisors 题解的更多相关文章
- 洛谷P2424 约数和 题解
		
题目 约数和 题解 此题可以说完全就是一道数学题,不难看出这道题所求的是 \(\sum\limits_{i=x}^{y}{\sum\limits_{d|i}{d}}\) 的值. 很显然,用暴力枚举肯定 ...
 - P1403 [AHOI2005]约数研究 题解
		
转载luogu某位神犇的题解QAQ 这题重点在于一个公式: f(i)=n/i 至于公式是怎么推出来的,看我解释: 1-n的因子个数,可以看成共含有2因子的数的个数+含有3因子的数的个数……+含有n因子 ...
 - 【SP26073】DIVCNT1 - Counting Divisors 题解
		
题目描述 定义 \(d(n)\) 为 \(n\) 的正因数的个数,比如 \(d(2) = 2, d(6) = 4\). 令 $ S_1(n) = \sum_{i=1}^n d(i) $ 给定 \(n\ ...
 - CF893B Beautiful Divisors 题解
		
Content 给定一个数 \(n\),求出 \(n\) 最大的可以表示成 \((2^k-1)\cdot2^{k-1}\) 形式的因数 \(x\). 数据范围:\(1\leqslant n\leqsl ...
 - Yaroslav and Divisors
		
Codeforces Round #182 (Div. 1) D:http://codeforces.com/contest/301/problem/D 题意:给一个1-n,n个数的序列,然后查询一个 ...
 - 【BZOJ3994】约数个数和(莫比乌斯反演)
		
[BZOJ3994]约数个数和(莫比乌斯反演) 题面 求\[\sum_{i=1}^n\sum_{j=1}^md(ij)\] 多组数据\((<=50000组)\) \(n,m<=50000\ ...
 - BZOJ1968 [Ahoi2005]COMMON 约数研究 数论
		
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1968 题意概括 求 ΣF(i) (1<=i<=n)N<=1000000 F( ...
 - 【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)
		
[51NOD 1847]奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数) 题面 51NOD \[\sum_{i=1}^n\sum_{j=1}^nsgcd(i,j)^k\] 其中\( ...
 - 「loj3058」「hnoi2019」白兔之舞
		
题意 有一个\((L+1)*n\) 的网格图,初始时白兔在\((0,X)\) , 每次可以向横坐标递增,纵坐标随意的位置移动,两个位置之间的路径条数只取决于纵坐标,用\(w(i,j)\) 表示,如果要 ...
 
随机推荐
- docker创建mongodb并且测试代码
			
mongodb docker 安装mongodb-创建用户 docker run -itd --name mongo -p 27017:27017 mongo --auth 进入数据库添加密码 ...
 - vscode 整理————开篇之力(一)
			
前言 作为一个开发为什么对一个vscode 这样的工具进行整理呢,因为vscode 非常的常用,它包含很多编辑器共同有的特征,这些特征帮助我们了解其他编辑器. 这里可能就有人疑问了,我们需要去非常的关 ...
 - Mac Maven 安装及配置
			
一.下载 打开 Maven 官方下载页面:https://maven.apache.org/download.cgi#,点击下载链接即可开始下载: 以 Maven 3.8.4 为例,解压后可以 ...
 - 洛谷 P5644 - [PKUWC2018]猎人杀(分治+NTT)
			
题面传送门 很久之前(2020 年)就听说过这题了,这么经典的题怎么能只听说而亲自做一遍呢 首先注意到每次开枪打死一个猎人之后,打死其他猎人概率的分母就会发生变化,这将使我们维护起来非常棘手,因此我们 ...
 - LVS-原理
			
一. 集群的概念 服务器集群简称集群是一种服务器系统,它通过一组松散集成的服务器软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台服务器.集群系统中的单个服务器通常称 ...
 - OOM机制
			
Linux内核根据应用程序的要求分配内存,通常来说应用程序分配了内存但是并没有实际全部使用,为了提高性能,这部分没用的内存可以留作它用,这部分内存是属于每个进程的,内核直接回收利用的话比较麻烦,所以内 ...
 - 学习java的第九天
			
一.今日收获 1.java完全学习手册第二章程序流程控制中的顺序结构与选择结构 2.学习了java中选择的一些语句和关键词 二.今日问题 1.例题验证有错的情况 2.哔哩哔哩教学视频的一些术语不太理解 ...
 - go 函数进阶
			
目录 回调函数和闭包 高阶函数示例 回调函数(sort.SliceStable) 闭包 最佳闭包实例 回调函数和闭包 当函数具备以下两种特性的时候,就可以称之为高阶函数(high order func ...
 - Hbase(二)【shell操作】
			
目录 一.基础操作 1.进入shell命令行 2.帮助查看命令 二.命名空间操作 1.创建namespace 2.查看namespace 3.删除命名空间 三.表操作 1.查看所有表 2.创建表 3. ...
 - JavaScript的数据结构快速学-链表的实现
			
1-单项链表 function LinkedList() { let Node = function(element) { // 辅助类,表示要添加到链表中的项 this.element = elem ...