[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为一个反素数.现在给你一个整数区间[ ...
随机推荐
- bnu 4060 奇偶性,异或运算
Plants vs. Zombies Time Limit: 5000ms Memory Limit: 2048KB 64-bit integer IO format: %lld Jav ...
- Chromium base库分割字符串SplitString
前一段时间在工作过程中遇到一个场景需要将http response中的request header中的cookie字段取出并进行解析,但是手头没有解析cookie的工具类,同时cookie的表现就是个 ...
- python学习之老男孩python全栈第九期_day023知识点总结——类和对象命名空间、组合
一. 类和对象命名空间类里 可以定义两种属性: 1. 静态属性 2. 动态属性 class Course: language = 'Chinese' def __init__(self, teache ...
- [转]Tips——Chrome DevTools - 25 Tips and Tricks
Chrome DevTools - 25 Tips and Tricks 原文地址:https://www.keycdn.com/blog/chrome-devtools 如何打开? 1.从浏览器菜单 ...
- 【PyQt5 学习记录】002:添加部件及网格布局
#!/usr/bin/python3 # -*- coding:utf-8 -*- import sys from PySide2.QtWidgets import (QApplication, QW ...
- Spring Data MongoDB 模糊查询
Pattern pattern = Pattern.compile("^.*" + value + ".*$"); Query query = new Quer ...
- Python中os.listdir的排序问题
上周应别人要求,使用python批量修改文件名称.文件名有规律,当时就用了一个函数直接精确的用文件名替换了.后来想直接可以用listdir来遍历每个文件来修改更加通用一些.但是看了os.listdir ...
- Python爬虫教程-01-爬虫介绍
Spider-01-爬虫介绍 Python 爬虫的知识量不是特别大,但是需要不停和网页打交道,每个网页情况都有所差异,所以对应变能力有些要求 爬虫准备工作 参考资料 精通Python爬虫框架Scrap ...
- 图片裁剪(基于RxPaparazzo)
图片裁剪(基于RxPaparazzo) 前言:基于RxPaparazzo的图片裁剪,图片旋转.比例放大|缩小. 效果: 开发环境:AndroidStudio2.2.1+gradle-2.14.1 涉及 ...
- Anjular中的路由配置以及服务等模块的一些基本操作
1.路由的配置: 在Angular.js中,我们可以根据自己的需求来配置路由,以达到当url中的地址改变时,会跳转不同的页面 <script> //一开始的url:"http:/ ...