bzoj1053题解
【题意分析】
本题中,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题解的更多相关文章
- BZOJ1053:[HAOI2007]反素数——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1053 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满 ...
- BZOJ1053 [HAOI2007]反素数ant 数论
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 传送门 - BZOJ1053 题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正 ...
- 【BZOJ1053】[HAOI2007]反素数(搜索)
[BZOJ1053][HAOI2007]反素数(搜索) 题面 BZOJ 洛谷 题解 大力猜一下用不了几个质因子,那么随便爆搜一下就好了. #include<iostream> #inclu ...
- 【BZOJ1053】[HAOI2007]反素数
[BZOJ1053][HAOI2007]反素数 题面 bzoj 洛谷 题解 可以从反素数的定义看出小于等于\(x\)的最大反素数一定是约数个数最多且最小的那个 可以枚举所有的质因数来求反素数,但还是跑 ...
- 【BZOJ1053】[HAOI2007]反素数ant 暴力
[BZOJ1053][HAOI2007]反素数ant Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
随机推荐
- scrollHeight与offsetHeight
offsetXxx 是 HTMLElement 的属性, HTMLElement 接口表示所有的 HTML 元素,scrollXxx 是 Element 的属性,Element 是一个通用性非常强的基 ...
- iftop简单使用
在linux下想查看当前与主机通信的IP有哪些?流量多少?怎么办?使用iftop吧,小巧实用的小工具.在排查问题的时候能起到大作用. centos安装 yum install iftop 界面如下: ...
- 解决springdatajpa插入大量数据速度慢的问题
通过看控制台日志可以知道,jpa执行插入的时候每次都会先查询是否存在,然后再一条一条的执行插入,速度相当慢,所以可以jpa和mybatis一起用,用mybatis写原生的sql语句,用过foreach ...
- 源码方式安装 lrzsz库
源码方式安装 lrzsz库:https://www.cnblogs.com/cocoajin/p/11731787.html 我们都知道安装了lrzsz工具的linux系统环境,在shell里可以非常 ...
- Java——异常的分类
2.异常的分类 异常主要分为:错误.一般性异常(受控异常).运行期异常(非受控异常) 错误:Java虚拟机无法解决的严重问题.如:JVM系统内部错误.资源耗尽等严重情况.一般不编写针对性的代码进行处理 ...
- 吉首大学校赛 K 白山茶与红玫瑰 (线段树区间操作)
链接:https://ac.nowcoder.com/acm/contest/925/K来源:牛客网 题目描述 公元2019年6月22日,白山茶王国与红玫瑰王国展开大战,在世外仙境——天空花园处,双方 ...
- JAVA学习之环境搭建
了解到JAVA语言的跨平台性的原理是通过在不同的操作系统中安装对应版本的的JAVA虚拟机(JVM)实现 开发JAVA前必须先搭建JAVA环境: 1.JAVA开发工具包JDK(JAVA DEVELOPM ...
- XML 扩展部分
引入命名空间 xmlns DTD缺点 1.不支持命名空间 2.支持的数据类型很少 3.DTD不可扩展 4.DTD不遵循XML规范 DTD的优点 简洁 schema 通过schema来解决DTD的不足 ...
- 2019牛客多校第四场C-sequence(单调栈+线段树)
sequence 题目传送门 解题思路 用单调栈求出每个a[i]作为最小值的最大范围.对于每个a[i],我们都要乘以一个以a[i]为区间内最小值的对应的b的区间和s,如果a[i] > 0,则s要 ...
- 前端(十六)—— JavaScript盒子模型、JS动画、DOM、BOM
JS盒子模型.JS动画.DOM.BOM 一.JS盒模型 1.width | height parseInt(getComputedStyle(ele, null).getPropertyValue(' ...