luogu1463 [HAOI2007]反素数
以下证明来自算法竞赛进阶指南
引理一: 答案就是 \([1,n]\) 之间约数个数最多的最小的数。
证明: 记 \(m\) 是 \([1,n]\) 之间约数个数最多的最小的数。则
- \(\forall i \in [1,m-1],g(i)<g(m)\);
- \(\forall i \in [m+1,n],g(m) \geq g(i)\)。
(1)说明 \(m\) 是一个反质数,(2)说明 \(m\) 以后的数都不是反质数。证毕。
引理二: \([1,n]\) 间的任何数不同质因子个数不会超过十个。
证明: \(2 \times 3 \times 5 \times 7 \times 11 \times 13 \times 17 \times 19 \times 23 \times 29 \times 31=200560490130\)。
所以也有所有指数和不超过 \(30\),因为 \(2^{30}>2 \times 10^9\)。
引理三: 答案必能表示成 \(2^{c_1} \times 3^{c_2} \times 5^{c_3} \times 7^{c_4} \times 11^{c_5} \times 13^{c_6} \times 17^{c_7} \times 19^{c_8} \times 23^{c_9} \times 29^{c_{10}}\)。且对于 \(i < j\)总有 \(c_i \geq c_j\)。\(c_i \geq 0\)。
证明: 倘若分解下来有个底数不属于这十个质数,记这个底数的幂为 \(p^c\),那么这十个质数里头必定有一个及以上的数不为答案的因子。记这个数为 \(q\),那么 \(q^c \times m/p^c\)约数个数和原答案相同且更优。
若对于 \(i < j\)有 \(c_i < c_j\),则可用交换指数的方法证明之。
然后 dfs 指数即可。
#include <iostream>
#include <cstdio>
using namespace std;
int n, ans, hmn;
typedef long long ll;
const int pri[]={0, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
void dfs(int x, int l, ll num, int yue){
if(x==11){
if(hmn<yue) hmn = yue, ans = num;
else if(hmn==yue && ans>num) ans = num;
return ;
}
int t=1;
for(int i=0; i<=l; i++){
dfs(x+1, i, num*t, yue*(i+1));
t *= pri[x];
if(num*t>n) break;
}
}
int main(){
cin>>n;
ans = 2000000005;
dfs(1, 30, 1, 1);
cout<<ans<<endl;
return 0;
}
luogu1463 [HAOI2007]反素数的更多相关文章
- [luogu1463 HAOI2007] 反素数 (约数)
传送门 Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例 ...
- BZOJ 1053: [HAOI2007]反素数ant dfs
1053: [HAOI2007]反素数ant 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1053 Description 对于任何正整 ...
- bzoj1053: [HAOI2007]反素数ant
51nod有一道类似的题...我至今仍然不会写暴搜!!! #include<cstdio> #include<cstring> #include<iostream> ...
- HAOI2007反素数
1053: [HAOI2007]反素数ant Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1346 Solved: 732[Submit][Sta ...
- 【BZOJ】1053: [HAOI2007]反素数ant
1053: [HAOI2007]反素数ant Description: g(x)表示x的约数个数,反素数:对于任意的i (i < x),均有g(i) < g(x),则x为反素数:现在输入不 ...
- bzoj 1053: [HAOI2007]反素数ant 搜索
1053: [HAOI2007]反素数ant Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1497 Solved: 821[Submit][Sta ...
- BZOJ 1053 [HAOI2007]反素数ant
1053: [HAOI2007]反素数ant Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1948 Solved: 1094[Submit][St ...
- 1053: [HAOI2007]反素数ant
1053: [HAOI2007]反素数ant Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3480 Solved: 2036[Submit][St ...
- 【BZOJ1053】[HAOI2007]反素数(搜索)
[BZOJ1053][HAOI2007]反素数(搜索) 题面 BZOJ 洛谷 题解 大力猜一下用不了几个质因子,那么随便爆搜一下就好了. #include<iostream> #inclu ...
随机推荐
- `<img>`放到`<div>`中底部出现空隙 以及解放方案.
形成情况: 外部的 不设置宽高, 由内部图片撑开 撑开后, 底部会有空隙 问题原因: div元素中的行内元素的默认vertical-align对齐方式是基线baseline img是行内元素, 所以会 ...
- 使用json传输数组实例
client.php <?php //遍历数组元素,并将元素转码 function array_iconv($data, $in_charset='GBK', $out_charset='UTF ...
- PHP在不同页面间传递Json数据示例代码
gettest.php文件: <?php $value["name"]= urlencode("我的姓名"); $value["pass&quo ...
- zoj3768Continuous Login
链接 这题通过暴力可以看出最多不超过3 具体为什么..等着看大牛的题解. 可以预处理出来两个数之和 用bool存下 然后枚举一个数 二分剩余数的位置就可以了 勉强可过 #include <ios ...
- P2667 超级质数
https://www.luogu.org/problem/show?pid=2667 题目背景 背景就是描述,描述就是背景...... 题目描述 一个质数如果从个位开始,依次去掉一位数字,两位数字, ...
- 多路复用IO和异步IO
多路复用I/O 它的基本原理就是select/epoll这个function会不断的轮询所负责的所有socket,当某个socket有数据到达了,就通知用户进程. 流程图如下: 当用户进程调用了sel ...
- 【学习笔记】深入理解js原型和闭包(13)——【作用域】和【上下文环境】
上文简单介绍了作用域,本文把作用域和上下文环境结合起来说一下,会理解的更深一些. 如上图,我们在上文中已经介绍了,除了全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义时就已经确定了.而不 ...
- 02html基础
02_html 1.几个标签 1.1 meta标签 meta标签的属性有name和http-equiv,其中name属性用于描述网页,对应于content(网页内容). <meta name=& ...
- SQL Server 2008还原数据库的具体方法
俗话说“好记性不如烂笔头”,在相隔较长的时间段内,每次还原客户的数据库都记不清完全的步骤,为此mark一下. SQL Server 2008一般默认备份的文件格式是bak,即后缀名为.bak.bak文 ...
- Android一键锁屏APP
题记: 这个app完全是拾人牙慧,作为练手用的,其实没有什么原创的东西.当然,博客还是我自己写的,记录下来,对自己也算是一种成长吧. 转载请注明原文地址: http://www.cnblogs.com ...