BZOJ 1053 - 反素数ant - [数论+DFS][HAOI2007]
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1053
题解:
可以证明,$1 \sim N$ 中最大的反质数,就是 $1 \sim N$ 中约数个数最多的数中,最小的那个。
证明:假设 $1 \sim N$ 中最大的反质数 $x$ 不是 $1 \sim N$ 中约数个数最多的,那么必然存在至少一个不等于 $x$ 的数字 $y$,它是 $1 \sim N$ 中约数个数最多的数中最小的,显然有 $g(y) > g(x)$。
那么,分类讨论两种情况:
1、$x < y$,显然 $[1,y)$ 中不可能找到一个 $i$ 使得 $g(y) \le g(i)$,因此 $g(y)$ 是一个反质数,且 $x < y$,$y$ 优于 $x$,不可能选 $x$ 作为答案。
2、$y > x$,此时 $g(y) > g(x)$,$x$ 不是一个反质数,不应当选择 $x$ 作为答案。
因此,不管怎么样,都不可能选择 $x$ 作为答案,因此只能选择 $1 \sim N$ 中约数个数最多的数作为答案,又显然的,应当选这些数字中最小的那一个。
证毕。
然后,我们可以进一步考虑,在给出的 $N \le 2e9$ 的前提下,$1 \sim N$ 中的任何数,其不相同质因子的个数不会超过 $10$ 个,因为 $2 \times 3 \times 5 \times 7 \times 11 \times 13 \times 17 \times 19 \times 23 \times 29 = 6469693230 > 2e9$。
同时,$1 \sim N$ 中的任何数,其任意一个质因子的幂次都不会超过 $30$,因为 $2^{31} > 2e9$。
最后,还可以证明 $x$ 如果是一个反质数,那么必然可以分解质因数成 $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}}$,且满足 $c_1 \ge c_2 \ge \cdots \ge c_{10} \ge 0$。
这个是因为,假设 $x$ 有一个质因子 $p>29$,那么 $2 \sim 29$ 这 $10$ 个质数必然至少有一个不能整除 $x$ 了,假设这个质数是 $q$,那么显然如果将 $p^k$ 换成 $q^k$,$x$ 就会变小,而且约数个数不变,也即存在一个 $x'<x$ 且 $g(x') = g(x)$,那么 $x$ 就不是反质数,证毕。
综上,我们可以暴力搜索 $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}}$ 中的 $c_1 \sim c_{10}$。我们可以通过 $c_1 \sim c_{10}$ 算出对应的约数个数,我们只需要维护约数个数最多的最小数即可。
AC代码(1A很舒服):
/**************************************************************
Problem: 1053
User: Dilthey
Language: C++
Result: Accepted
Time:24 ms
Memory:1288 kb
****************************************************************/ #include<bits/stdc++.h>
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
using namespace std;
typedef long long ll; ll n;
int p[]={,,,,,,,,,}, c[]; pair<ll,int> ans;
void dfs(int pos,int limit,ll num,int cnt)
{
if(pos>=)
{
if(cnt>ans.se) ans=mk(num,cnt);
if(cnt==ans.se && num<ans.fi) ans=mk(num,cnt);
return;
} for(ll i=,now=;i<=limit;i++,now*=p[pos])
{
if(num*now>n) break;
dfs(pos+,i,num*now,cnt*(i+));
}
} int main()
{
cin>>n;
ans=mk((ll)(2e9+),);
dfs(,,1LL,);
cout<<ans.fi<<endl;
}
BZOJ 1053 - 反素数ant - [数论+DFS][HAOI2007]的更多相关文章
- BZOJ 1053 反素数ant
初读这道题,一定有许多疑惑,其中最大的疑惑便是"反素数",反素数的概念很简单,就是,a<b同时a的因数个数大于b的因数个数.但是想要完成本题还需要一些信息,关于 ...
- BZOJ1053 [HAOI2007]反素数ant 数论
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 传送门 - BZOJ1053 题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正 ...
- Luogu P1463 [POI2002][HAOI2007]反素数【数论/dfs】By cellur925
题目传送门 题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1 ...
- BZOJ 1053 & 反素数
题意: 反素数,膜一篇GOD's Blog...http://blog.csdn.net/ACdreamers/article/details/25049767 此文一出,无与争锋... CODE: ...
- 1053. [HAOI2007]反素数ant【DFS+结论】
Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x ,则称x为反质数.例如,整数 ...
- BZOJ 1053 反素数 题解
题面 引理1: 1~n中的最大反质数,就是1~n中约数个数最多的数中最小的一个(因为要严格保证g(x)>g(i)): 引理2:1~n中任何数的不同因子不会超过10个,因为他们的乘积大于2,00 ...
- BZOJ 1053: [HAOI2007]反素数ant dfs
1053: [HAOI2007]反素数ant 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1053 Description 对于任何正整 ...
- 【BZOJ】【1053】【HAOI2007】反素数ant
搜索 经典搜索题目(其实是蒟蒻只会搜……vfleaking好像有更优秀的做法?) 枚举质数的幂,其实深度没多大……因为$2^32$就超过N了……而且质数不能取的太大,所以不会爆…… /******** ...
- 【BZOJ】1053: [HAOI2007]反素数ant
1053: [HAOI2007]反素数ant Description: g(x)表示x的约数个数,反素数:对于任意的i (i < x),均有g(i) < g(x),则x为反素数:现在输入不 ...
随机推荐
- JAVA进阶8
间歇性混吃等死,持续性踌躇满志系列-------------第8天 1.遍历输出HashSet中的全部元素 import java.util.HashSet; import java.util.Ite ...
- Spring系列(零) Spring Framework 文档中文翻译
Spring 框架文档(核心篇1和2) Version 5.1.3.RELEASE 最新的, 更新的笔记, 支持的版本和其他主题,独立的发布版本等, 是在Github Wiki 项目维护的. 总览 历 ...
- webpack4之踩坑总结
一.先放上项目目录结构 二.问题总结 1.关于process.env.NODE_ENV问题 刚开始的时候,我想在配置文件中使用到这个环境变量,却发现一直获取不到值,晕晕晕,查了资料才知道,这个环境变量 ...
- npm——安装教程、安装vue脚手架
npm:是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题.比如常用的有: 1)允许用户从NPM服务器下载别人编写的第三方包到本地使用. 2)允许用户从NPM服务器下载并安 ...
- C#VS2017添加ReportViewer控件
安装完vs2017之后我们进行添加Report Viewer控件: 1. 点击Tools -> Extensions and Updates... 2. 在新窗口搜索栏中输入rdlc后搜索,结果 ...
- 轮播swiper配置选项
本文主要介绍了swiper配置选项,包含了轮播的无限滚动.懒加载.监听当前位置.上下翻页.过渡动画渐变.延时加载图片.自动轮播等: swiper官方链接DEMO <!DOCTYPE html&g ...
- java反射机构应用
//atom.getClazzName:package.ClassName Class<?> clazz = Class.forName(atom.getClazzName()); ...
- sort排序用法
Python] sorted函数 我们需要对List.Dict进行排序,Python提供了两个方法对给定的List L进行排序,方法1.用List的成员函数sort进行排序,在本地进行排序,不返回副本 ...
- MySQL和B树的那些事
一.零铺垫 在介绍B树之前,先来看另一棵神奇的树——二叉排序树(Binary Sort Tree),首先它是一棵树,“二叉”这个描述已经很明显了,就是树上的一根树枝开两个叉,于是递归下来就是二叉树了( ...
- iOS开发常用第三库
字典转模型 1.(MJExtension) https://github.com/CoderMJLee/MJExtension 2.(YYModel) https://github.com/ibire ...