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,2,4,6等都是反质数。
现在给定一个数N,你能求出不超过N的最大的反质数么?(N<=2000000000)
$Sol$
首先我们需要知道一个数约数的个数。这个是算术基本定理的推论,这里就不再赘述了,这儿稍微提了一句。
之后因为N在2e9内,所以它至多有10个质因子。
再次,我们要满足质因子从小到大的数量单调不增。为什么呢?当一个质因子比较小时,它就有更强的可塑性去贡献更多的因子。譬如出名要趁早以及当一个选手比你小还比你强你就没办法了这样的意思。
于是我们就可以直接采用$dfs$来维护最大的反素数。最大的反素数一定是相同约数中最小的。因为约数相同时,但是当他更大时,就更有可能出现比他小,约数还比他多的反素数。
代码中几个参量分别是当前质数下标,现在累乘的结果,当前质数出现的次数,上一个质数出现的次数,以及现在总约数个数。注意,当一个素数被完全用尽(开始搜下一质数时),才累计它的个数。
$Code$
#include<cstdio>
#include<algorithm> using namespace std;
typedef long long ll; ll n,ans,num;
ll prime[]={,,,,,,,,,,,,,}; void dfs(int pos,ll mul,ll nowcnt,ll lastcnt,ll allcnt)
{
if(ans==allcnt*(nowcnt+)&&mul<num)
num=mul;
if(allcnt*(nowcnt+)>ans)
ans=allcnt*(nowcnt+),num=mul;
if(nowcnt+<=lastcnt&&mul*prime[pos]<=n)
dfs(pos,mul*prime[pos],nowcnt+,lastcnt,allcnt);
for(int i=pos+;i<=;i++)
if(mul*prime[i]<=n)
dfs(i,mul*prime[i],,nowcnt,allcnt*(nowcnt+));
} int main()
{
scanf("%lld",&n);
dfs(,,,,);
printf("%lld\n",num);
return ;
}
$Others$
其实...本题还可以打表做。我们可以预先搞出所有的反素数,根据范围来得出答案。
但是...这个表最后我还是没完整地打出来(弱)。下面提供打部分表的思路。
/*
---------------Sheet 1 --------------------
#include<cstdio>
#include<algorithm>
#define maxn 500000000 using namespace std; int ans=0;
short a[maxn];//技巧:用short省空间 int main()
{
freopen("1.out","w",stdout);
for(int i=1;i<=maxn-1;i++)
for(int j=i;j<=maxn;j+=i)
a[j]++; for(int i=1;i<=maxn;i++)
if(a[i]>ans)
{
ans=a[i];
printf("%d,",i);
}
printf("\n");
printf("%d",ans);
return 0;
}*/
/*
-----------Sheet 2---------------
#include<cstdio>
#include<algorithm>
#define maxn 1000000001
#define maxpre 500000000 using namespace std; int ans=1152;
short a[maxpre+1]; int main()
{
freopen("1.out","w",stdout);
for(int i=1;i<=maxn-1;i++)
for(int j=(maxpre/i)*i+i;j<=maxn-1;j+=i)
a[j-maxpre]++; for(int i=1;i<=maxpre;i++)
if(a[i]>ans)
{
ans=a[i];
printf("%d,",i+500000000);
}
printf("\n");
printf("%d",ans);
return 0;
}*/
/*-----------Sheet3-------------
#include<cstdio>
#include<algorithm>
#define maxn 1500000001
#define maxpre 1000000000 using namespace std; int ans=1344;
short a[(maxpre>>1)+1]; int main()
{
freopen("1.out","w",stdout);
for(int i=1;i<=maxn-1;i++)
for(int j=(maxpre/i)*i+i;j<=maxn-1;j+=i)
a[j-maxpre]++; for(int i=1;i<=maxpre;i++)
if(a[i]>ans)
{
ans=a[i];
printf("%d,",i+maxpre);
}
printf("\n");
printf("%d",ans);
return 0;
}*/
dabiao
Luogu P1463 [POI2002][HAOI2007]反素数【数论/dfs】By cellur925的更多相关文章
- 洛谷 P1463 [POI2002][HAOI2007]反素数
题目链接 题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1, ...
- [POI2002][HAOI2007]反素数 数论 搜索 好题
题目描述: 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4, ...
- 【题解】洛谷P1463 [POI2002][HAOI2007] 反素数(约数个数公式+搜索)
洛谷P1463:https://www.luogu.org/problemnew/show/P1463 思路 约数个数公式 ai为质因数分解的质数的指数 定理: 设m=2a1*3a2*...*pak ...
- BZOJ 1053: [HAOI2007]反素数ant dfs
1053: [HAOI2007]反素数ant 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1053 Description 对于任何正整 ...
- [POI2002][HAOI2007]反素数
题意 反素数 想法 证明这样一个结论 对于一个可行的反素数\(p\) \(p = \sum_{i}^{k} p_{k} ^ {c_k}\) 当 \(p_i > p_j 有 c_i < c_ ...
- 数学结论【p1463】[POI2002][HAOI2007]反素数
Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数 ...
- [POI2002][HAOI2007]反素数(Antiprime)
题目链接 这道题需要用到整数唯一分解定理以及约数个数的计算公式.这里我就不再阐述了. 公式可以看出,只有指数影响约数个数,那么在唯一分解出的乘式中,指数放置的任何位置都是等价的.(即 23*34*57 ...
- 【BZOJ1053】[HAOI2007]反素数 (搜索+数论)
\([POI2002][HAOI2007]\)反素数 题目描述 对于任何正整数x,其约数的个数记作\(g(x)\).例如\(g(1)=1.g(6)=4\). 如果某个正整数x满足:\(g(x)> ...
- bzoj1053: [HAOI2007]反素数ant
51nod有一道类似的题...我至今仍然不会写暴搜!!! #include<cstdio> #include<cstring> #include<iostream> ...
随机推荐
- NVIDIA---CUDA
http://en.wikipedia.org/wiki/CUDA CUDA From Wikipedia, the free encyclopedia CUDA Developer(s) N ...
- 自己动手写CPU之第九阶段(7)——MIPS32中的LL、SC指令说明
将陆续上传新书<自己动手写CPU>,今天是第46篇. 在MIPS32指令集中有两条特殊的存储载入指令:链接载入指令LL.条件存储指令SC,本次将介绍这两条指令.在兴许将实现这两条指令. 9 ...
- php新版本号废弃 preg_replace /e 修饰符
近期serverphp版本号升级到了 5.6 发现出了非常多警告 preg_replace(): The /e modifier is deprecated, use preg_replace_ca ...
- mysqld与mysqld_safe的区别
文章1: 直接运行mysqld程序来启动MySQL服务的方法很少见,mysqld_safe脚本会在启动MySQL服务器后继续监控其运行情况,并在其死机时重新启动它.用mysqld_safe脚本来启动M ...
- mac下Tomcat的安装
转自:http://blog.csdn.net/liuyuyefz/article/details/8072485 对于Apache Tomcat 估计很多童鞋都会,那么今天就简单说下在mac上进行t ...
- 对FreeMarker技术的思考
依照静态非静态来划分网页分为两种:静态网页和非静态网页,究其优缺点而言,静态网页在用户訪问的时候响应快,可是因为里面的数据是写死的.所以致命的缺陷就是数据不能动态显示.非静态页面(如jsp)数据能够动 ...
- Mongoose Embedded Web Server Library
https://github.com/cesanta/mongoose http://ltp.ai/docs/ltpserver.html LTP Server在轻量级服务器程序mongoose基础上 ...
- C/C++ 操作符优先级
不能光转贴,有空要熟悉之后,要写点心得.现在发现 . 的优先级确实很高. C: Precedence Operator Description Associativity 1 ++ -- Suffix ...
- C++中的const完全解析
1. const修饰普通变量和指针 const修饰变量,一般有两种写法:const TYPE value;TYPE const value; 这两种写法在本质上是一样的.它的含义是:const修饰的类 ...
- ICMP协议 广播以查询局域网内的所有主机
看到了很多局域网内的主机扫描工具,在想怎么去实现这样一个工具.前几天看了Ping源码--ICMP协议的实例,ICMP可以用来探测网联网内的任一主机,ICMP和广播地址结合来扫描局域网内的所有主机不是很 ...