【题意分析】

  本题中,x被称为反质数,当且仅当没有任意一个严格小于x的正整数的约数个数大于x的约数个数。求不超过N的最大反质数。

【解题思路】

  数据范围中最大的N=2*109

  首先可以证明,不超过N的反质数不会拥有9个以上的不同质因数。因为2*3*5*7*11*13*17*19*23*29=6469693230>6*109>N。

  设某数n=∏piki(pi<pi+1),则其约数个数g(n)=∏(ki+1)。(因为每个质数对约数个数的贡献是相互独立的,质数pi的可能选择方案数为(ki+1),所以可以用乘法原理乘起来)。

  显然,对于相同的顺序序列k,选择越小的pi越优,于是最优选择方案就是选择前9个质因数。

  于是暴力枚举的状态数为∏[logpN],则其至多为[log2N]*[log3N]*[log5N]*[log7N]*[log11N]*[log13N]*[log17N]*[log19N]*[log23N]=3779758080。

  显然直接暴力是无法过的,于是需要一些鲁(吉)棒(丽)或玄(松)学(爷)优化。

  所谓鲁棒优化,就是打表。。先把所有的反质数用上面这个爆搜打出来存在表里,然后二分查找即可。

  打表做法的可行性得益于反质数个数的增长极其缓慢,105的数据范围中只有30个反质数,从下图不难看出。

  玄学优化呢,有两种方法:

•方法一:考虑对ki的枚举进行优化。一种朴素的想法是同一个素因数的个数过多一定不利于让答案最优,而且越大的质因数个数应当越少,于是可以面向数据调参,限制ki枚举的上限。

•方法二:部分记忆化,f[i][j]表示j的乘积分配给第i个开始的质数最大能达到的约数个数,然后可以对超出记忆化范围的搜索做下界减枝。

  复杂度O(松)。

【参考代码】

  然而当时这题我只用了玄学优化方法一的弱化版,不知为什么就0ms过了?!

  可能有更加紧确的复杂度分析或者bz的数据有毒。。无论是哪一点请读者指出,不胜感激。

 #include<cstdio>
#define REP(I,start,end) for(int I=start;I<=end;I++)
const int prime[]={,,,,,,,,,,,,,,,};
long long maxsum, bestnum, n;
void getantiprime(long long num, long long k,long long sum,int limit)
{
int i;
long long temp;
if(sum>maxsum)
{
maxsum=sum;
bestnum=num;
}
if(sum==maxsum&&bestnum>num)
bestnum=num;
if(k>)
return;
temp=num;
REP(i,,limit)
{
if(temp*prime[k]>n)
break;
temp*=prime[k];
getantiprime(temp,k+,sum*(i+),i);
}
}
int main()
{
scanf("%lld",&n);
getantiprime(,,,);
printf("%lld\n",bestnum);
return ;
}

bzoj1053题解的更多相关文章

  1. BZOJ1053:[HAOI2007]反素数——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1053 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满 ...

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

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

  3. 【BZOJ1053】[HAOI2007]反素数(搜索)

    [BZOJ1053][HAOI2007]反素数(搜索) 题面 BZOJ 洛谷 题解 大力猜一下用不了几个质因子,那么随便爆搜一下就好了. #include<iostream> #inclu ...

  4. 【BZOJ1053】[HAOI2007]反素数

    [BZOJ1053][HAOI2007]反素数 题面 bzoj 洛谷 题解 可以从反素数的定义看出小于等于\(x\)的最大反素数一定是约数个数最多且最小的那个 可以枚举所有的质因数来求反素数,但还是跑 ...

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

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

  6. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  7. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  8. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  9. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

随机推荐

  1. jQuery随机抽取数字号代码

    html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta ...

  2. vue 学习八 自定义指令

    vue指令注册有两种方式 1 全局注册 在main.js中 使用vue.directive Vue.directive('alert_w', { inserted(el,bin,vn) { conso ...

  3. spring boot 四大组件之Auto Configuration

    SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @Confi ...

  4. Ubuntu下终端命令安装sublime

    Ubuntu下终端命令安装sublime出现软件包无法定位 sublime-text-install 且多次换源不成功 建议采用离线安装 安装教程如下 用Ubuntu上的浏览器下载一个 Sublime ...

  5. Hbase的rowkey设计

    HBase的rowKey设计技巧 1.设计宗旨与目标 主要目的就是针对特定的业务模型,按照rowKey进行预分区设计,使之后面加入的数据能够尽可能的分散于不同的rowKey中.比如复合RowKey. ...

  6. 【spring】1.2、Spring Boot创建项目

    Spring Boot创建项目 在1.1中,我们通过"Spring Starter Project"来创建了一个项目,实际上是使用了Pivotal团队提供的全新框架Spring B ...

  7. Sql生成 Insert 语句

    declare @TableName sysname select @TableName = 'T_OOSOrder' declare @result varchar(max) = 'INSERT I ...

  8. 二叉树总结及部分Lintcode题目分析 1

    1. 遍历问题 Preorder / Inorder / Postorder preorder: root left right inorder: left root right postorder: ...

  9. JAVA 字符串索引

    String类的substring()方法   截取字符串,在java语言中的用法 1.  public String substring(int beginIndex) 返回一个新字符串,它是此字符 ...

  10. MySQL数据库_目录

    MySQL数据库初识 MySQL的库表详细操作 MySQL行(记录)的详细操作 MySQL之单表查询 MySQL之多表查询 Navicat工具.pymysql模块 MySQL之视图.触发器.事务.存储 ...