题目传送门

题目描述

对于任何正整数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的更多相关文章

  1. 洛谷 P1463 [POI2002][HAOI2007]反素数

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

  2. [POI2002][HAOI2007]反素数 数论 搜索 好题

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

  3. 【题解】洛谷P1463 [POI2002][HAOI2007] 反素数(约数个数公式+搜索)

    洛谷P1463:https://www.luogu.org/problemnew/show/P1463 思路 约数个数公式  ai为质因数分解的质数的指数 定理: 设m=2a1*3a2*...*pak ...

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

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

  5. [POI2002][HAOI2007]反素数

    题意 反素数 想法 证明这样一个结论 对于一个可行的反素数\(p\) \(p = \sum_{i}^{k} p_{k} ^ {c_k}\) 当 \(p_i > p_j 有 c_i < c_ ...

  6. 数学结论【p1463】[POI2002][HAOI2007]反素数

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

  7. [POI2002][HAOI2007]反素数(Antiprime)

    题目链接 这道题需要用到整数唯一分解定理以及约数个数的计算公式.这里我就不再阐述了. 公式可以看出,只有指数影响约数个数,那么在唯一分解出的乘式中,指数放置的任何位置都是等价的.(即 23*34*57 ...

  8. 【BZOJ1053】[HAOI2007]反素数 (搜索+数论)

    \([POI2002][HAOI2007]\)反素数 题目描述 对于任何正整数x,其约数的个数记作\(g(x)\).例如\(g(1)=1.g(6)=4\). 如果某个正整数x满足:\(g(x)> ...

  9. bzoj1053: [HAOI2007]反素数ant

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

随机推荐

  1. 判断IPv6地址合法性

    在 <netinet/in.h> 头文件下有下列这些宏用于判断IPv6地址合法性 返回0代表true,返回非零值代表ipv6地址为非指定类型的的地址(false) int IN6_IS_A ...

  2. (转)C系程序员面试必知必会之大端小端

      C程序员经常被问及的一道面试题是:什么是大端/小端,怎么样判断是大端/小端?大端小端问题对于嵌入式程序员绝对不会陌生(否则,别告诉我你是搞嵌入式的),它与CPU体系结构有关.比如常见的X86处理器 ...

  3. alsa声卡切换

    环境 ubuntu12.04 因为桌面版的默认装了,而且调声音也很方便,这里说一下server版下的配置,毕竟做开发经常还是用server版的 1.安装 apt-get install alsa-ba ...

  4. Tomcat配置,Myeclipse破解和各种设置

    转自:http://www.cnblogs.com/tyjsjl/archive/2006/11/14/2156111.html 根据tomcat来配置eclipse和MyEclipse结合使用起来, ...

  5. python day- 5 字典(dic)的 增删改查 及 操作方法

    字典(dic) 1.定义及格式 用{ }大括号括起来的,由key:value 来保存数据的就是 字典(dic) eg:dic = {"及时雨" : "宋江" , ...

  6. Kubernetes实战阅读笔记--2、架构和部署

    安装Kubernetes “本书准备了4台虚拟机(CentOS 7.0系统)用于部署Kubernetes运行环境,包括一个Etcd.一个Kubernetes Master和三个Kubernetes N ...

  7. Web 监听器

    什么事web 监听器? Servlet规范中定义的一种特殊类 用于监听ServletContext.HttpSession和ServletRequest等象的创建与销毁的事件 用监听域对象的属性发生修 ...

  8. bash exec

    1 当exec执行命令时,会为该命令创建shell进程,并且终止老的shell进程的执行,并且保留老的shell进程的进程号 [root@localhost ~]# cat test_exec.sh ...

  9. JS是否确认提示 +页面跳转

    JS友好提示 +页面跳转 function logout()...{if (confirm("你确定要注销身份吗?是-选择确定,否-选择取消"))...{window.locati ...

  10. DedeCms最新文章显示红色日期或加上new字或new小图片

    DedeCMS发布的文章显示红色日期或加上new字或new小图片,给近三天(或当天)发布的文章显示红色日期或加上new字或new小图片等,都是围绕pubdate做文章,写扩展的. 1.红色的日期   ...