BZOJ-1225-[HNOI2001] 求正整数
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
HINT
Source
题解
考虑这道题我们首先要知道约数个数定理
知道了这个定理后,我们不难发现可以将n分解质因数,且最多有16个质因子
这样我们可以dfs(now,nowx,s)//now表示当前取到第now个质数,nowx表示当前数,s表示对数(可以发现最后的答案是会超过long long的,所以我们存一下对数)
但是裸的dfs是会T的,需要最小值的剪枝优化
最后用高精度算一下就可以了
#include<bits/stdc++.h>
#define N 50005
using namespace std;
const int prime[]={,,,,,,,,,,,,,,,,};
int n,cnt,num,len,k;
int a[N];
int t[];
int tmp[],b[];
double Min;
double lg[];
void mul(int x){
for (int i=;i<=len;i++) t[i]=t[i]*x;
int j=;
while (t[j]>||j<len){
t[j+]+=t[j]/;
t[j]%=;
j++;
}
len=j;
}
void dfs(int now,int nowx,double s){
if (s>=Min) return;
if (nowx==){
Min=s; k=now-;
for (int i=;i<=now-;i++) b[i]=tmp[i];
return;
}
if (now>) return;
for (int i=;(i+)*(i+)<=nowx;i++)
if (!(nowx%(i+))){
if (i){
tmp[now]=i;
dfs(now+,nowx/(i+),s+tmp[now]*lg[now]);
}
if ((i+)*(i+)!=nowx){
tmp[now]=nowx/(i+)-;
dfs(now+,i+,s+tmp[now]*lg[now]);
}
}
}
int main(){
for (int i=;i<=;i++) lg[i]=log(prime[i]);
scanf("%d",&n);
Min=1e9;
dfs(,n,);
t[]=; len=;
for (int i=;i<=k;i++){
int p=prime[i];
for (int j=;j<=b[i];j++) mul(p);
}
for (int i=len;i>=;i--)
printf("%d",t[i]);
return ;
}
BZOJ-1225-[HNOI2001] 求正整数的更多相关文章
- BZOJ 1225: [HNOI2001] 求正整数( dfs + 高精度 )
15 < log250000 < 16, 所以不会选超过16个质数, 然后暴力去跑dfs, 高精度计算最后答案.. ------------------------------------ ...
- BZOJ 1225: [HNOI2001] 求正整数 高精度+搜索+质数
题意:给定n求,有n个因子的最小正整数. 题解:水题,zcr都会,我就不说什么了. 因数个数球求法应该知道,将m分解质因数,然后发现 a1^p1*a2^p2....an^pn这样一个式子, (1+p1 ...
- 【BZOJ】1225: [HNOI2001] 求正整数
http://www.lydsy.com/JudgeOnline/problem.php?id=1225 题意:给一个数n,求一个最小的有n个约数的正整数.(n<=50000) #include ...
- bzoj1225 [HNOI2001] 求正整数
1225: [HNOI2001] 求正整数 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 762 Solved: 313[Submit][Statu ...
- 高精度+搜索+质数 BZOJ1225 [HNOI2001] 求正整数
// 高精度+搜索+质数 BZOJ1225 [HNOI2001] 求正整数 // 思路: // http://blog.csdn.net/huzecong/article/details/847868 ...
- luogu P1128 [HNOI2001]求正整数 dp 高精度
LINK:求正整数 比较难的高精度. 容易想到贪心不过这个贪心的策略大多都能找到反例. 考虑dp. f[i][j]表示前i个质数此时n的值为j的最小的答案. 利用高精度dp不太现实.就算上FFT也会T ...
- [HNOI2001]求正整数
题目描述 对于任意输入的正整数n,请编程求出具有n个不同因子的最小正整数m. 例如:n=4,则m=6,因为6有4个不同整数因子1,2,3,6:而且是最小的有4个因子的整数. 输入输出格式 输入格式: ...
- [HNOI2001] 求正整数 - 背包dp,数论
对于任意输入的正整数n,请编程求出具有n个不同因子的最小正整数m. Solution (乍一看很简单却搞了好久?我真是太菜了) 根据因子个数计算公式 若 \(m = \prod p_i^{q_i}\) ...
- P1128 [HNOI2001]求正整数
传送门 rqy是我们的红太阳没有它我们就会死 可以考虑dp,设\(dp[i][j]\)表示只包含前\(j\)个质数的数中,因子个数为\(i\)的数的最小值是多少,那么有转移方程 \[f[i][j]=m ...
- 求正整数n所有可能的和式的组合(如;4=1+1+1+1、1+1+2、1+3、2+1+1、2+2
作者:张小二 nyoj90 ,可以使用递归的方式直接计算个数,也可以通过把满足的个数求出来计数,因为在juLy博客上看到整数划分,所以重写了这个代码,就是列出所m的可能性,提交后正确.acmer的入门 ...
随机推荐
- 常量池之String.intern()方法
JDK7将String常量池从Perm区移动到了Java Heap区.在JDK1.6中,intern方法会把首次遇到的字符串实例复制到永久代中,返回的也是永久代中的实例.但是在JDK1.7以后,Str ...
- 解决linux AMR转MP3出现转码成功却无法播放的问题
根据帖子:http://blog.csdn.net/z313731418/article/details/50218341 的提示,在linux安装ffmpeg,确实在linux下使用命令可以将am ...
- IDEA——IDEA使用Tomcat服务器出现乱码问题
最近刚使用IDEA,在开发一个功能的时候,开始使用Jetty作为容器进行web项目开发,测试通过.然后想了一下线上服务器使用的容器是Tomcat,还是用Tomcat跑一下项目在测试一下,本地和服务器使 ...
- ArrayList ConcurrentModificationException
1.ConcurrentModificationException ConcurrentModificationException 出现在使用 ForEach遍历,迭代器遍历的同时,进行删除,增加出现 ...
- pdf点击超链接后返回:alt+ 向左 /向右
pdf点击超链接后返回:alt+ 向左 /向右
- ObjectSNMP
下面的例子,就是使用ObjectSNMP获取RFC1213-MIB的例子:其中的system和ifTable对象就是对应的SNMPMIB中的system组合interface中的ifTable表. p ...
- Linux之不得不说的init(Linux启动级别的含义 init 0-6)
init 0:关机: init 1:单用户模式(只root进行维护): init 2:多用户 init 3:完全多用户 init 4:安全模式 init 5:图形化 init 6:重启 可以在/etc ...
- hdu 1542 线段树 求矩形并
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- bzoj1143 祭祀river(最大独立集)
[CTSC2008]祭祀river Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2175 Solved: 1098[Submit][Status] ...
- 统计学习方法——CART, Bagging, Random Forest, Boosting
本文从统计学角度讲解了CART(Classification And Regression Tree), Bagging(bootstrap aggregation), Random Forest B ...