博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[HNOI 2001]求正整数
阅读量:4622 次
发布时间:2019-06-09

本文共 1926 字,大约阅读时间需要 6 分钟。

Description

对于任意输入的正整数n,请编程求出具有n个不同因子的最小正整数m。例如:n=4,则m=6,因为6有4个不同整数因子1,2,3,6;而且是最小的有4个因子的整数。

Input

n(1≤n≤50000)

Output

m

Sample Input

4

Sample Output

6

题解

这道题和解题思路和方法简直一毛一样...

同样我们引入这个公式:

对任一整数$a>1$,有$a={p_1}^{a_1}{p_2}^{a_2}…{p_n}^{a_n}$,其中$p_1<p_2<…<p_n$均为素数,而$a_1$,$a_2$…,$a_n$是正整数。

$a$的正约数个数为:$(1+a_1)(1+a_2)…(1+a_n)$

同理,我们也是求有$n$个因数的最小整数。

我们最坏的情况所有质数只取$1$个,由于$15<log_{2}50000<16$

所以只要取前$16$个质数即可,

其余都和之前那题一样...

搜的时候为了保存最优值,因为数据大会爆$long$ $long$我们考虑用指数幂的形式保存,带一个数组保存取质数的个数。

同时注意每层循环枚举取质数的个数时候,因为不合法的情况很多,可以只枚举$\sqrt n$次,然后用枚举的值算出对应的另外一个值。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 using namespace std;15 const double INF=1e100;16 const int pri[18]={ 0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};17 18 int n;19 double lg[18],mm=INF;20 int ans[18],tmp[18];21 22 void Dfs(double e,int y,int cen)23 {24 if (e>=mm) return;25 if (y==1)26 {27 mm=e;28 memcpy(ans,tmp,sizeof(ans));29 return;30 }31 if (cen>16) return;32 for (int i=0;(i+1)*(i+1)<=y;i++) if (!(y%(i+1)))33 {34 if (i!=0)35 {36 tmp[cen]=i;37 Dfs(e+lg[cen]*i,y/(i+1),cen+1);38 tmp[cen]=0;39 }40 if ((i+1)*(i+1)!=y)41 {42 tmp[cen]=y/(i+1)-1;43 Dfs(e+lg[cen]*(y/(i+1)-1),i+1,cen+1);44 tmp[cen]=0;45 }46 }47 }48 void print()49 {50 const int MOD=1e4;51 int a[100000],maxn=1;52 a[1]=1;53 for (int i=1;i<=16;i++)54 {55 for (int j=1;j<=ans[i];j++)56 {57 for (int k=1;k<=maxn;k++) a[k]*=pri[i];58 for (int k=1;k<=maxn;k++) a[k+1]+=a[k]/MOD,a[k]%=MOD;59 if (a[maxn+1]) maxn++;60 }61 }62 printf("%d",a[maxn]);63 for (int i=maxn-1;i>=1;i--) printf("%04d",a[i]);64 printf("\n");65 }66 67 int main()68 {69 scanf("%d",&n);70 for (int i=1;i<=16;i++) lg[i]=log(pri[i]);71 Dfs(0,n,1);72 print();73 return 0;74 }

 

转载于:https://www.cnblogs.com/NaVi-Awson/p/7412291.html

你可能感兴趣的文章
查询摄像头参数
查看>>
【VBA】获取Excle的安装路径
查看>>
掌握 需求过程阅读笔记04
查看>>
开发mis系统需要的技术
查看>>
Lucene学习总结之一:全文检索的基本原理 2014-06-25 14:11 666人阅读 评论(0) ...
查看>>
Android Studio 上传aar(Library)到JCenter
查看>>
JS判断手机浏览器
查看>>
程序员不应迷失方向
查看>>
@Autowired和@Resource的区别
查看>>
Change runlevel on CentOS 6.9/CentOS 7.5
查看>>
Controller简介
查看>>
【二分图最大权完美匹配】【KM算法】【转】
查看>>
三种定位+堆叠+li小黑点变图片
查看>>
禁止ViewPager滑动
查看>>
【洛谷 1908】逆序对
查看>>
CSS布局总结(一)
查看>>
【 js 基础 】为什么 call 比 apply 快?
查看>>
Scala基础语法
查看>>
文件上传下载
查看>>
hdu 2050.折线分割平面
查看>>