[HNOI 2001]求正整数
Description
对于任意输入的正整数n,请编程求出具有n个不同因子的最小正整数m。例如:n=4,则m=6,因为6有4个不同整数因子1,2,3,6;而且是最小的有4个因子的整数。
Input
n(1≤n≤50000)
Output
m
Sample Input
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]求正整数相关推荐
- NYOJ 90 —— 求正整数n划分为若干个正整数的划分个数
整数划分 时间限制:3000 ms | 内存限制:65535 KB 描述 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk, 其中n1≥n2≥-≥nk≥1,k≥1. 正整数n的这种表 ...
- 求正整数N(N1)的质因数的个数,相同的质因数需要重复计算(java)
package Four; /** 分解质因数* 素数常用来分解质因数,每个数都可以写成一个或几个质数相乘的形式* 其中每个质数都是这个数的质因数,把一个数用质因数相乘的形式表示出来,* 就称为分解质 ...
- 信息学奥赛一本通 1150:求正整数2和n之间的完全数
[题目链接] ybt 1150:求正整数2和n之间的完全数 [题目考点] 1.因数.因子 因数(因子)是指整数a除以整数b(b≠0) 的商正好是整数而没有余数,我们就说b是a的因数. 因数包括这个数本 ...
- 信息学奥赛一本通(1150:求正整数2和n之间的完全数)
1150:求正整数2和n之间的完全数 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 30272 通过数: 18285 [题目描述] 求正整数22和nn之间 ...
- 信息学奥赛C++语言: 求正整数2和n之间的完全数
[题目描述] 求正整数2和n之间的完全数(一行一个数). 完全数:因子之和等于它本身的自然数,如6=1+2+3 [输入] 输入n. [输出] 一行一个数,按由小到大的顺序. [输入样例] 7 [输出样 ...
- 正整数m的百位数字python_求正整数m的百位数字
[多选题]关于三阀组的使用,下列说法正确的是() (6.0分) [多选题]下列流量计不能用于气体测量的是() (6.0分) [填空题]执行下列Python语句将产生的结果是 . m=True n=Fa ...
- 求正整数n所有可能的和式的组合「百度凤巢」
1.题目描述 求正整数n所有可能的和式的组合(如:4=1+1+1+1.1+1+2.1+3.2+1+1.2+2) 2.解题思路 dfs思路,从最小值开始,依次加入中间结果中 注意加入的值是可以重复的,因 ...
- java1到n所有质数_实验一:实现求正整数1-N之间所有质数的功能,并进行测试。...
实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 命令行下的程序开 ...
- java求一个正整数的位数_java经典问题——求正整数的位数
题目:给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. public class Number { int number; State current; int count; ...
最新文章
- 单相计量芯片RN8209D使用经验分享(转)
- Java 反射修改类的常量值、静态变量值、属性值
- Entity Framework 在MySQL中执行SQL语句,关于参数问题
- 华为HCIE实验考试真题,杭州考场上午TS下午LAB
- java reader类 实例_Java Reader ready()用法及代码示例
- Android之解决VideoView控件的进度条位置摆放问题和打开播放黑屏问题
- html聚光灯特效,css实现聚光灯效果的代码分享
- vscode生成vue模板快捷键_vs code 快速生成vue 模板
- java中set怎么建int型_使用Array.setInt来填充Java中的数组
- Kali Linux 安全渗透教程lt;第三更gt;1.2 安全渗透所需工具
- 使用Hibernate注解Annotations进行对象映射的异常处理
- 挂载ntfs_Linux识别移动硬盘ntfs格式
- mysql数据库学习(一)
- 网络类型之BMA与NBMA的区别
- [机房练习赛4.3]drive
- 量子计算时代来临?D-Wave 量子计算机使运算速度提高 1 亿倍!
- 线程池(ThreadPoolExecutor)详解
- 酒美网CEO:线上线下向300万人卖红酒
- 原来当年发葫芦娃种子的才是真正的老司机
- 南京工业大学python试卷_南京工业大学施工技术期末试卷及答案
热门文章
- [linux-svn] linux下svn常用指令
- GetClientRect相当于GetWindowRect和ScreenToClient区别
- 工作381-兼容移动端头部
- [vue] 你知道style加scoped属性的用途和原理吗?
- [css] 使用css画出一个五角星
- [css] 用css画出一把刻度尺
- [css] 为什么说css的选择器是从右向左匹配?
- [js] 写一个获取页面中所有checkbox的方法
- java面试题3 牛客:下面有关jdbc statement的说法错误的是
- 线性系统的基本理论与运算