题目链接: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]的更多相关文章

  1. BZOJ 1053 反素数ant

           初读这道题,一定有许多疑惑,其中最大的疑惑便是"反素数",反素数的概念很简单,就是,a<b同时a的因数个数大于b的因数个数.但是想要完成本题还需要一些信息,关于 ...

  2. BZOJ1053 [HAOI2007]反素数ant 数论

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 传送门 - BZOJ1053 题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正 ...

  3. 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 ...

  4. BZOJ 1053 & 反素数

    题意: 反素数,膜一篇GOD's Blog...http://blog.csdn.net/ACdreamers/article/details/25049767 此文一出,无与争锋... CODE: ...

  5. 1053. [HAOI2007]反素数ant【DFS+结论】

    Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x ,则称x为反质数.例如,整数 ...

  6. BZOJ 1053 反素数 题解

    题面 引理1:  1~n中的最大反质数,就是1~n中约数个数最多的数中最小的一个(因为要严格保证g(x)>g(i)): 引理2:1~n中任何数的不同因子不会超过10个,因为他们的乘积大于2,00 ...

  7. BZOJ 1053: [HAOI2007]反素数ant dfs

    1053: [HAOI2007]反素数ant 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1053 Description 对于任何正整 ...

  8. 【BZOJ】【1053】【HAOI2007】反素数ant

    搜索 经典搜索题目(其实是蒟蒻只会搜……vfleaking好像有更优秀的做法?) 枚举质数的幂,其实深度没多大……因为$2^32$就超过N了……而且质数不能取的太大,所以不会爆…… /******** ...

  9. 【BZOJ】1053: [HAOI2007]反素数ant

    1053: [HAOI2007]反素数ant Description: g(x)表示x的约数个数,反素数:对于任意的i (i < x),均有g(i) < g(x),则x为反素数:现在输入不 ...

随机推荐

  1. 第六节,Python的科学计算包——Numpy

    1.基本类型(array) import numpy as np a=[1,2,3,4] b=np.array(a) #array([1,2,3.4]) type(b) #<type 'nump ...

  2. SQL Server - JOIN

    JOIN

  3. Dos.Common

    引言: Dos.Common是一个开发中的常用类库,如HttpHelper.LogHelper.CacheHelper.CookieHelper.MapperHelper等等.与Dos.WeChat. ...

  4. 百度地图api文档实现任意两点之间的最短路线规划

    两个点之间的路线是使用“Marker”点连接起来的,目前还没找到改变点颜色的方法,测试过使用setStyle没有效果. <html><head> <meta http-e ...

  5. IP网际协议

    IP分类 IP地址分为网络号和主机号,5类不同的IP地址格式如下: A类地址每个网段内最多有224个,也就是16,777,214个. B类地址每个网段内最多有216个,也就是65535个. C类地址每 ...

  6. spark Transformations算子

    在java中,RDD分为javaRDDs和javaPairRDDs.下面分两大类来进行. 都必须要进行的一步. SparkConf conf = new SparkConf().setMaster(& ...

  7. UOJ#407. 【IOI2018】狼人 Kruskal,kruskal重构树,主席树

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ407.html 题解 套路啊. 先按照两个节点顺序各搞一个kruskal重构树,然后问题转化成两棵krus ...

  8. 第四章:4.0 python常用的模块

    1.模块.包和相关语法 使用模块好处: 最大的好处是大大提高了代码的可维护性.其次,编写代码不必从零开始.当一个模块编写完毕,就可以被其他地方引用.我们在编写程序的时候,也经常引用其他模块,包括Pyt ...

  9. 移动端click事件出现300ms延迟

    问题分析: 双击缩放是指手在屏幕上快速点击两次,iOS自带的Safari浏览器会将网页缩放至原始比例.当用户在屏幕上单击某元素时,浏览器会先捕获此处单击,但浏览器不知道用户是要单击链接还是要双击该部分 ...

  10. Moonlight Shadow

    歌词 Moonlight Shadow 月光幽灵 -- Dana Winner 1. The last that ever she saw him 那是她今生最后一次见到他 2. carried aw ...