[LuoguP1221]最多因子数
[Luogu1221]最多因子数(Link)
求区间[L,R]内约数个数最多的数和它的约数个数。
这个题吧,乍一看确实不是很难,然后稍微一想,嗯,是个傻*题。这是唯一感受,不要问我为什么。
首先我们定义一个函数\(F(X)\)表示\(X\)的约数个数。题目要求求出\([L,R]\)中的\(F(X)max\)和这个数。首先最基本我们要知道每一个数\(Data[i]\)都一个基本性质:
\(Data[i] = Prime_1^{M_1} \times Prime_2^{M_2} \times ... \times Prime_N^{M_N}\),语言表示就是任意i一个数都可以分解成多个质数的若干次方的乘积,稍微搞一搞我们得到\(F(X) = (M_1 + 1) \times (M_2 + 1) \times ...\times (M_N + 1)\)。
由此将搜索的过程由质因数分解转化为了质因数相乘,则搜索的时候只需要搜索质因数就可以了,然后记录质因数的个数即可。当然,单纯这样搞是会\(T\)掉的,下面数一下剪枝:
- 按照递增顺序搜索每一个质数。
- 枚举质数的指数。如果当前枚举的质数算上指数的乘积为\(X\),下一次枚举的时候指数为\(Y\),如果\(X \times Y > R\),超过了区间的右端点,直接\(return\)。这个是很显而易见的。
- 如果当前的质数算上指数的乘积在\([L, R]\)之间,那么代表它有可能更新答案,而\(R - L < X\)的时候,我们也直接\(return\),因为下一次搜索一定搜不到\([L, R]\)之间的数,所以zhi直接跳出。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std ;
typedef long long LL ;
const int MAXN = 500010 ;
const int MAXM = 40000 ;
int L, R, Ans, Max, Prime[MAXN] ;
bool NotP[MAXN] ; int Tot ;
inline void Dfs(LL H, LL N, LL Now) {
if (H > Tot || N > R) return ;
int K = (int)(log(R / double(N)) / log(double(Prime[H]))) ;
if (Now * (1 << K) < Ans) return ;
if (N >= L && (Now > Ans || (Now == Ans && N < Max)))
Ans = Now, Max = N ;
LL X = 1 ;
for (int i = 1 ; i <= K ; i ++) X *= Prime[H] ;
for (int i = K + 1 ; i >= 1 ; i --) {
Dfs(H + 1, N * X, Now * i) ;
X /= Prime[H] ;
} return ;
}
int main() {
scanf("%d %d", & L, & R) ;
if (L == R && L == 1) {
printf("Between %d and %d, 1 has a maximum of 1 divisors.\n", L, R);
return 0 ;
}
for (int i = 2 ; i <= MAXM ; i ++) {
if (! NotP[i]) {
Prime[++ Tot] = i ;
for (int j = i << 1 ; j <= MAXM ; j += i)
NotP[j] = true ;
}
}
if (R - L <= 10000) {
for (int i = L ; i <= R ; i ++) {
int T = 2 ;
for (int j = 2 ; j * j <= i ; j ++) {
if (j * j == i) T ++ ;
else if (i % j == 0) T += 2 ;
} if (T > Ans) Ans = T, Max = i ;
}
}
else Dfs(1, 1, 1) ;
printf("Between %d and %d, %d has a maximum of %d divisors.\n", L, R, Max,Ans);
return 0 ;
}
[LuoguP1221]最多因子数的更多相关文章
- 洛谷P1221 最多因子数 [搜索,数学]
题目传送门 最多因子数 目描述 数学家们喜欢各种类型的有奇怪特性的数.例如,他们认为945是一个有趣的数,因为它是第一个所有约数之和大于本身的奇数. 为了帮助他们寻找有趣的数,你将写一个程序扫描一定范 ...
- Dynamic Programming [Algorithm]
今天学习动态规划01背包问题,从一篇非常不错的文章中学习甚多.转载于此,感谢作者的分享! 原文地址 通过金矿模型介绍动态规划 对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总 ...
- 【ASC 23】G. ACdream 1429 Rectangular Polygon --DP
题意:有很多棍子,从棍子中选出两个棍子集合,使他们的和相等,求能取得的最多棍子数. 解法:容易看出有一个多阶段决策的过程,对于每个棍子,我们有 可以不选,或是选在第一个集合,或是选在第二个集合 这三种 ...
- Huffman的应用_Huffman编码
//最优二叉树 #include <iostream> #include <iomanip> using namespace std; //定义结点类型 //[weight | ...
- NYOJ-取石子(二)
取石子(二) 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 小王喜欢与同事玩一些小游戏,今天他们选择了玩取石子. 游戏规则如下:共有N堆石子,已知每堆中石子的数量,并且 ...
- 1296: [SCOI2009]粉刷匠
Description windy有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝色. windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色. 每个 ...
- DFS cdoevs 3100 蜗牛
cdoevs 3100 蜗牛 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 萨丽·斯内尔(Sally Snail,蜗牛)喜欢在 ...
- 二模10day2解题报告
T1.最多因子数(divisors) 给出范围l,r求其中约数和最大的最小整数. 非常深井冰的题目:如果特判加暴力的话分数低的可怜 AC做法要用到分解质因数和线性筛(这俩好写),然而,一个一个枚举还是 ...
- HDOJ(HDU) 2521 反素数(因子个数~)
Problem Description 反素数就是满足对于任意i(0< i < x),都有g(i) < g(x),(g(x)是x的因子个数),则x为一个反素数.现在给你一个整数区间[ ...
随机推荐
- RFC1939 POP3协议 中文版 (转载)
1.简介 对于在网络上的比较小的结点,支持消息传输系统(MTS)是不实际的.例如,一台工作站可能不具有充足的资源允许SMTP服务器和相当的本地邮件传送系统保持序驻留,并持续运行.同样的,将一台个人 ...
- Sublime Text3之安裝Emmet及使用技巧
首先准备工作: 如果你的Sublime Text3没有Package Control组件先看一下这里,如果以安装请忽略: 1.按Ctrl+`调出sublime text的console 2.粘贴以下代 ...
- mac关闭渐隐和弹出动画效果
苹果系统应用程序的窗口和对话框每次使用的时候都有华丽的特效,但是如果你感觉这种特效显得有点慢(MacGG闲的蛋疼),那该如何取消掉他呢? 方法很简单,打开"终端"(Finder-& ...
- 04.CSS动画示例-->烟花
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 关于<!DOCTYPE html>
1.定义 DOCTYPE标签是一种标准通用标记语言的文档类型声明,目的是要告诉标准通用标记语言解析器,它应该使用什么样的文档类型定义(DTD)来解析文档. <!DOCTYPE> 声明必须是 ...
- C++ Knowledge series 1
Programming language evolves always along with Compiler's evolvement. 1. The C++ Object Model: Strou ...
- Ubuntu,忘记了root密码,怎么重置?
进入单用户模式: 1.开机到grub时,用上下键移到第二行的恢复模式,按e(注意不是回车) 即Ubuntu,With Linux 3.2.0-23-generic(recovery mode) 2.把 ...
- 4类Storage方案(AS开发实战第四章学习笔记)
4.1 共享参数SharedPreferences SharedPreferences按照key-value对的方式把数据保存在配置文件中,该配置文件符合XML规范,文件路径是/data/data/应 ...
- MooseFS安装部署
环境信息 Master服务器 dev04 chunkserver服务器 dev02.dev03.dev04 metalogger服务器 dev03 mount客户端 dev01.dev02 安装前下载 ...
- MVC实例分析1.1
E_S源码百度云分享链接: http://pan.baidu.com/s/1dFHzEJv 思维导图源文件分享链接: http://pan.baidu.com/s/1hrAXGC8 简单PPT分享链接 ...