题目传送门

题目描述

对于任何正整数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. ADO.NET 对数据操作 以及如何通过C# 事务批量导入数据

    ADO.NET 对数据操作 以及如何通过C# 事务批量导入数据   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...

  2. js 监控浏览器关闭(完美兼容chrome & ie & fire fox)

    var UnloadConfirm = {}; UnloadConfirm.MSG_UNLOAD = "数据尚未保存,离开后可能会导致数据丢失\n\n您确定要离开吗?"; Unlo ...

  3. 淘宝数据库OceanBase SQL编译器部分 源码阅读--生成物理查询计划

    淘宝数据库OceanBase SQL编译器部分 源码阅读--生成物理查询计划 SQL编译解析三部曲分为:构建语法树,制定逻辑计划,生成物理执行计划.前两个步骤请参见我的博客<<淘宝数据库O ...

  4. 编译 Deedle

    编译 Deedle Deedle 中含有 RProvider. 要编译 Deedle.须要先下载 R.地址: http://cran.cnr.berkeley.edu/bin/windows/base ...

  5. mysql的DUPLICATE KEY

    经常遇到这样的情景,向一个表里插入一条数据,如果已经存在就更新一下,用程序实现麻烦而且在并发的时候可能会有问题,这时用mysql的DUPLICATE KEY 很方便 用法如下: INSERT INTO ...

  6. 项目Beta冲刺(团队4/7)

    项目Beta冲刺(团队4/7) 团队名称: 云打印 作业要求: 项目Beta冲刺(团队) 作业目标: 完成项目Beta版本 团队队员 队员学号 队员姓名 个人博客地址 备注 221600412 陈宇 ...

  7. (转载)js(jquery)的on绑定点击事件执行两次的解决办法

    js(jquery)的on绑定点击事件执行两次的解决办法—不是事件绑定而是事件冒泡 遇到的问题:jquery中用.on()给页面中新加的元素添加点击事件时,点击事件源,绑定的事件执行两次,这里的ale ...

  8. HDOJ--1869--六度分离(用三种算法写的,希望能比較出来他们之间的差别)

    六度分离 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  9. Android系统设置Android adb 开关的方法【转】

    本文转载自:http://www.wxtlife.com/2015/11/24/Android-set-adb-status/ 想第一时间获取我的最新文章,请关注公众号: 技术特工队 在整机系统开发中 ...

  10. Centos6.8更好yum源

    第一步:备份你的原镜像文件,以免出错后可以恢复. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.back ...