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

题解

这道题和[HAOI 2007]反素数ant解题思路和方法简直一毛一样...

同样我们引入这个公式:

对任一整数$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<set>
 2 #include<map>
 3 #include<cmath>
 4 #include<ctime>
 5 #include<queue>
 6 #include<stack>
 7 #include<cstdio>
 8 #include<string>
 9 #include<vector>
10 #include<cstdlib>
11 #include<cstring>
12 #include<iostream>
13 #include<algorithm>
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

[HNOI 2001]求正整数相关推荐

  1. NYOJ 90 —— 求正整数n划分为若干个正整数的划分个数

    整数划分 时间限制:3000 ms  |  内存限制:65535 KB 描述 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk,  其中n1≥n2≥-≥nk≥1,k≥1.  正整数n的这种表 ...

  2. 求正整数N(N1)的质因数的个数,相同的质因数需要重复计算(java)

    package Four; /** 分解质因数* 素数常用来分解质因数,每个数都可以写成一个或几个质数相乘的形式* 其中每个质数都是这个数的质因数,把一个数用质因数相乘的形式表示出来,* 就称为分解质 ...

  3. 信息学奥赛一本通 1150:求正整数2和n之间的完全数

    [题目链接] ybt 1150:求正整数2和n之间的完全数 [题目考点] 1.因数.因子 因数(因子)是指整数a除以整数b(b≠0) 的商正好是整数而没有余数,我们就说b是a的因数. 因数包括这个数本 ...

  4. 信息学奥赛一本通(1150:求正整数2和n之间的完全数)

    1150:求正整数2和n之间的完全数 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 30272     通过数: 18285 [题目描述] 求正整数22和nn之间 ...

  5. 信息学奥赛C++语言: 求正整数2和n之间的完全数

    [题目描述] 求正整数2和n之间的完全数(一行一个数). 完全数:因子之和等于它本身的自然数,如6=1+2+3 [输入] 输入n. [输出] 一行一个数,按由小到大的顺序. [输入样例] 7 [输出样 ...

  6. 正整数m的百位数字python_求正整数m的百位数字

    [多选题]关于三阀组的使用,下列说法正确的是() (6.0分) [多选题]下列流量计不能用于气体测量的是() (6.0分) [填空题]执行下列Python语句将产生的结果是 . m=True n=Fa ...

  7. 求正整数n所有可能的和式的组合「百度凤巢」

    1.题目描述 求正整数n所有可能的和式的组合(如:4=1+1+1+1.1+1+2.1+3.2+1+1.2+2) 2.解题思路 dfs思路,从最小值开始,依次加入中间结果中 注意加入的值是可以重复的,因 ...

  8. java1到n所有质数_实验一:实现求正整数1-N之间所有质数的功能,并进行测试。...

    实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 命令行下的程序开 ...

  9. java求一个正整数的位数_java经典问题——求正整数的位数

    题目:给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. public class Number { int number; State current; int count; ...

最新文章

  1. 单相计量芯片RN8209D使用经验分享(转)
  2. Java 反射修改类的常量值、静态变量值、属性值
  3. Entity Framework 在MySQL中执行SQL语句,关于参数问题
  4. 华为HCIE实验考试真题,杭州考场上午TS下午LAB
  5. java reader类 实例_Java Reader ready()用法及代码示例
  6. Android之解决VideoView控件的进度条位置摆放问题和打开播放黑屏问题
  7. html聚光灯特效,css实现聚光灯效果的代码分享
  8. vscode生成vue模板快捷键_vs code 快速生成vue 模板
  9. java中set怎么建int型_使用Array.setInt来填充Java中的数组
  10. Kali Linux 安全渗透教程lt;第三更gt;1.2 安全渗透所需工具
  11. 使用Hibernate注解Annotations进行对象映射的异常处理
  12. 挂载ntfs_Linux识别移动硬盘ntfs格式
  13. mysql数据库学习(一)
  14. 网络类型之BMA与NBMA的区别
  15. [机房练习赛4.3]drive
  16. 量子计算时代来临?D-Wave 量子计算机使运算速度提高 1 亿倍!
  17. 线程池(ThreadPoolExecutor)详解
  18. 酒美网CEO:线上线下向300万人卖红酒
  19. 原来当年发葫芦娃种子的才是真正的老司机
  20. 南京工业大学python试卷_南京工业大学施工技术期末试卷及答案

热门文章

  1. [linux-svn] linux下svn常用指令
  2. GetClientRect相当于GetWindowRect和ScreenToClient区别
  3. 工作381-兼容移动端头部
  4. [vue] 你知道style加scoped属性的用途和原理吗?
  5. [css] 使用css画出一个五角星
  6. [css] 用css画出一把刻度尺
  7. [css] 为什么说css的选择器是从右向左匹配?
  8. [js] 写一个获取页面中所有checkbox的方法
  9. java面试题3 牛客:下面有关jdbc statement的说法错误的是
  10. 线性系统的基本理论与运算