参考

约数个数:每个质因数的次数+1的乘积。
2e9<2x3x5x7x11x13x17x19x23;
2e9<pow(2,31);
last其实是最多扫30次。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//求出第一个约数个数最大的数======================
const int N=2e5+10;
int n;
int maxn,number;
int pri[9]={2,3,5,7,11,13,17,19,23};
//指数之和不超过30 void dfs(int u,int last,int p,int s)//质数扫描指针 次数还剩几次,number,约数个数
{if(s>maxn||(s==maxn&&p<number)){number=p;maxn=s;}//全都扫了一遍 if(u==9) return;for(int i=1;i<=last;i++){if((ll)pri[u]*p>n) break;p*=pri[u];dfs(u+1,i,p,s*(i+1));//这里如果不走dfs,那么就会走pow(2,30);}
}
int main()
{cin>>n;dfs(0,30,1,1);cout<<number;return 0;
}

2022.1.11又做了一次,觉得是个好题,结合约数+dfs。
HAOI2007反素数ANT
求约数个数的方法:

设这个数是由x1,x2,x3…乘起来的(xi都是素数),那么一个数的约数个数就是这些素数的指数次数+1的乘积;
如 36 = 22*32,那么约数个数为(2+1)*(2+1)=9;

这里妙就妙在,dfs中:

  1. 用(i+1)(i代表某个质数乘起来的次数)巧妙地求出约数个数
  2. u,代表乘到的质数数组下标指针,同时u>9次绝对会超过数据范围(事实上,231>2e9),所以既把u作为下标指针,又把它当作跳出dfs的条件。

注意,dfs之后num的值要更新,因为还有下一次循环。
不要暴力求约数,一定会T。

#include<bits/stdc++.h>
using namespace std;
#define fir(i,a,n) for(int i=a;i<=n;i++)
typedef long long ll;
const int N=1e5+10;
int n;
int pri[10]={2,3,5,7,11,13,17,19,23,29};
int ans;
int yuee;
void dfs(ll num,int yue,int u)//要巧妙地把求约数转换为(i+1)的连乘
{if(u>9) return;//对应的是pri数组的9 if(num>n) return;if(yue>yuee){yuee=yue;ans=num;}if(yue==yuee&&ans>num){ans=num;}for(int i=1;i<32;i++){if(num*pri[u]>n) break;dfs(num*pri[u],yue*(i+1),u+1);num*=pri[u];//这一步不能漏 因为还要继续循环 }
}
int main()
{cin>>n;dfs(1,1,0);cout<<ans;return 0;
}

AcWing 198. [HAOI2007] 反素数 约数个数+dfs相关推荐

  1. BZOJ(8) 1053: [HAOI2007]反素数ant

    1053: [HAOI2007]反素数ant Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4118  Solved: 2453 [Submit][ ...

  2. bzoj1053: [HAOI2007]反素数ant

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

  3. [HAOI2007]反素数ant

    1053: [HAOI2007]反素数ant Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1907  Solved: 1069 [Submit][ ...

  4. P1463 [POI2001][HAOI2007]反素数 题解

    P1463 [POI2001][HAOI2007]反素数 题解 题意分析 首先这是一个数论题 S o l u t i o n \tt Solution Solution 根据数据分析得出 2 9 &l ...

  5. 洛谷P1463 [POI2001][HAOI2007]反素数

    P1463 [POI2001][HAOI2007]反素数 详解见代码注释 #include <bits/stdc++.h> using namespace std; const int N ...

  6. BZOJ 1053 [HAOI2007]反素数ant

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

  7. bzoj 1053: [HAOI2007]反素数ant 51nod-1060:最复杂的数(反素数与因数个数计算)

    问题概述:把一个数的约数个数定义为该数的复杂程度,给出一个n,求1-n中复杂程度最高的那个数. 例如:12的约数为:1 2 3 4 6 12,共6个数,所以12的复杂程度是6.如果有多个数复杂度相等, ...

  8. P1463-[POI2002][HAOI2007]反素数【约数,数论】

    正题 评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1463 题目大意 求1∼n1∼n1\sim n中最大的一个约数个数比 ...

  9. [HAOI2007]反素数

    嘟嘟嘟 做这道题得自己推出这么几个结论-- 1.最大的反素数一定是约数个数最多的的数中最小的那个. 这个其实很好想:根据定义,g(x)要大于任意的g(i),而不是大于等于. 2.1-n中任意一个数的不 ...

最新文章

  1. java中字符串分割器_java简易文本分割器实现代码
  2. find server/ -type d|xargs -I {} echo mkdir /root/{}
  3. MFC中修改静态文本框中文字的字体、颜色
  4. 数据库——环境初建改端口和密码(转)
  5. C++7行代码实现求最大公约数
  6. vscode插件推荐2020_2020年,前端开发者必备的10个VS Code扩展插件
  7. HDU2102 A计划【BFS】
  8. 系统性能优化- Session丢失
  9. numpy数组及处理:效率对比
  10. openstreetmap地图下载的几种方法
  11. ts16949 软件开发流程图_新产品开发流程图:包括APQP,DFMEA,PFMEA,PPAP(FAI),SPC,MSA(GRR)等...
  12. 从Qt Console Application到Qt GUI Application
  13. 机器学习算法工程师--实习面经
  14. Canvas实现太极图案并旋转
  15. fastboot使用
  16. win10强制关闭飞行模式_让你的电脑1台变n台 win10自带虚拟机Hyper-V讲解
  17. 1N4148的导通电压
  18. 解决:HotSeat短信图标提醒有误
  19. 美团CAT客户端接入方式
  20. 检查内存泄露的利器--VLD使用指南

热门文章

  1. python合并视频和声音_Python 视频文件的分割和合并
  2. 敏感关键词 词库_【店铺技能】1688会员新手如何去优化关键词!
  3. 在简易示波器中计算波形频率不用fft!!!
  4. tomcat运行springmvc项目:m2e-wtp error: path/target/m2e-wtp/web-resources/META-INF/MANIFEST.MF (No such
  5. Migrating to Cloud-Native Application Architectures中文版《迁移到云原生应用架构》
  6. 爱情智慧:抓紧幸福的三个动作
  7. 免费云总机IPPBX电话交换系统
  8. 王小二C:一个大神的Android成长之路
  9. python高德 查询县_【python】获取高德地图省市区县列表
  10. CodingGame - Shadows of the Knight - Episode 1思路