欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


传送门 - BZOJ1053


题目描述

  对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数。例如,整数1,2,4,6等都是反质数。现在给定一个数N,你能求出不超过N的最大的反质数么?

(1<=N<=2,000,000,000)


题解

  对于任何一个数 $p$ ,令 $p=\prod_\limits{i\in \{prime\} } i^{q_i}$ ,则总有 $ g(p)=\prod_\limits{i\in \{prime\} } (q_i+1)$ 。

  命题1:如果 $p$ 是一个反素数,那么必然满足 $\forall i,j\in\{prime\} $ 如果 $i<j$ ,则 $q_i\geq q_j$ 。

  我们可以简单的证明这一点。即:若 $q_i<q_j$ 则 $i^{q_i}j^{q_j}\geq i^{q_j}j^{q_i}$ ,所以至少存在一个数 $q^\prime$ ,在满足 $g(q)=g(q^\prime)$ 的情况下,使得 $q^\prime < q$ 。这与之前 “$q$ 是反素数” 的定义相悖,所以命题1 得证。

  但是,可以见得,上述命题虽然具有充分性,但是不具有必要性。

  譬如:

  $a=2^13^15^1$

  $b=2^35^1$

  它们的因数个数都是 $8$ 。

  

  由于我们在证明了命题1 之后,很容易发现可能的反素数非常少。所以我们只要暴搜就可以了。

  建议判掉类似于上面举的例子的这种情况。


代码

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
typedef long long LL;
const LL prime[]={,,,,,,,,,};
LL n,ans,cnt;
void dfs(LL times,int pos,int ysz,int maxv){
if (ysz>cnt)
ans=times,cnt=ysz;
else if (ysz==cnt&&times<ans)
ans=times,cnt=ysz;
for (int i=;i<=maxv;i++){
times*=prime[pos];
if (times>n)
return;
dfs(times,pos+,ysz*(i+),i);
}
}
int main(){
scanf("%d",&n);
ans=cnt=;
dfs(,,,);
printf("%lld",ans);
return ;
}
 
 

BZOJ1053 [HAOI2007]反素数ant 数论的更多相关文章

  1. bzoj1053: [HAOI2007]反素数ant

    51nod有一道类似的题...我至今仍然不会写暴搜!!! #include<cstdio> #include<cstring> #include<iostream> ...

  2. [BZOJ1053] [HAOI2007] 反素数ant (搜索)

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

  3. BZOJ1053: [HAOI2007]反素数ant(爆搜)

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4163  Solved: 2485[Submit][Status][Discuss] Descript ...

  4. bzoj千题计划296:bzoj1053: [HAOI2007]反素数ant

    http://www.lydsy.com/JudgeOnline/problem.php?id=1053 求n以内约数个数最多的数 #include<cstdio> using names ...

  5. 【BZOJ1053】[HAOI2007]反素数ant 暴力

    [BZOJ1053][HAOI2007]反素数ant Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) ...

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

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

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

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

  8. bzoj 1053: [HAOI2007]反素数ant 搜索

    1053: [HAOI2007]反素数ant Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1497  Solved: 821[Submit][Sta ...

  9. BZOJ 1053 [HAOI2007]反素数ant

    1053: [HAOI2007]反素数ant Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1948  Solved: 1094[Submit][St ...

随机推荐

  1. DotNetBar TextBoxDropDown响应按键事件

    textBoxDropDownHelp.TextBox.KeyDown += new KeyEventHandler(textBoxDropDownHelp_KeyDown); private voi ...

  2. 23. Spring Boot JPA BaseDao 配置 文章

    参考文献:(早期JPA版本的描述) https://blog.csdn.net/yingxiake/article/details/51017797 https://www.jianshu.com/p ...

  3. 四、u-boot 链接脚本

    4.1 C语言中的段 编译器在编译程序的时候,将程序中的所有的元素分成了一些组成部分,各部分构成一个段,所以说段是可执行程序的组成部分. 代码段:代码段就是程序中的可执行部分,直观理解代码段就是函数堆 ...

  4. fcn16s

  5. D - Milk Patterns (出现k次可重复的最长子串的长度)

    题目链接:https://cn.vjudge.net/contest/283743#problem/D 题目大意:给你n个数,然后问你出现m次的最长子串的长度. 具体思路:和上一篇博客的内容差不多,这 ...

  6. Spring+SpringMVC+mybatis整合以及注解的使用(三)

    1.包结构:

  7. 【vim】实时计算器

    在插入模式下,你可以使用 Ctrl+r 键然后输入 =,再输入一个简单的算式.按 Enter 键,计算结果就会插入到文件中.例如,尝试输入: Ctrl+r '=2+2' ENTER 然后计算结果&qu ...

  8. ES系列九、ES优化聚合查询之深度优先和广度优先

    1.优化聚合查询示例 假设我们现在有一些关于电影的数据集,每条数据里面会有一个数组类型的字段存储表演该电影的所有演员的名字. { "actors" : [ "Fred J ...

  9. mysql系列一、mysql数据库规范

    一. 表设计 库名.表名.字段名必须使用小写字母,“_”分割. 库名.表名.字段名必须不超过12个字符. 库名.表名.字段名见名知意,建议使用名词而不是动词. 表必须使用InnoDB存储引擎. 表必须 ...

  10. System.Runtime.InteropServices.COMException (0x800A03EC): 无法访问文件

    使用Microsoft.Office.Interop.Excel 操作 今天在服务器部署,操作程序csv文件转xsl文件的时候,遇到一下问题: System.Runtime.InteropServic ...