LINK:求正整数

比较难的高精度。

容易想到贪心不过这个贪心的策略大多都能找到反例。

考虑dp.

f[i][j]表示前i个质数此时n的值为j的最小的答案。

利用高精度dp不太现实。就算上FFT也会T掉。

乘积的形式 我们可以将其变成对数的形式就很容易转移了。

转移时记录决策 然后 最后做一遍高精度即可。

值得一提的是 压位高精度时比如压15为那么最后输出的形式为printf("%015d",ans);

因为%1e15之后有效数位还有15个而并非14个.

const int MAXN=510,N=17;
int n,m,top;
db c[N];
db f[N][MAXN];
int g[N][MAXN],v[MAXN];
int a[N]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
int w[MAXN];
int ans[MAXN*10],len;
inline void get_path(int i,int j)
{
int las=g[i][j];
int ww=v[las]/v[j];
w[i]=ww-1;
if(i)get_path(i-1,las);
}
int main()
{
//freopen("1.in","r",stdin);
//freopen("2.out","w",stdout);
get(n);m=16;if(n==1){puts("1");return 0;}
rep(1,m,i)c[i]=log(a[i]*1.0);
rep(1,n,i)if(n%i==0)v[++top]=i;
rep(0,m,i)rep(1,top,j)f[i][j]=INF;
f[0][top]=0;
rep(0,m-1,i)
{
//if(i==m-1)cout<<"ww"<<endl;
rep(1,top,j)
{
//cout<<f[i][j]<<endl;
//if(i==m-1&&j==top)cout<<"ww"<<' '<<f[m-1][j]<<endl;
if(fabs(f[i][j]-INF)<=EPS)continue;
for(int k=1;k<=j;++k)
{
if(v[j]%v[k]==0)
{
int w=v[j]/v[k];
//if(i==m-1&&j==top&&k==1)
//cout<<' '<<f[i+1][k]<<' '<<f[i+1][k]-f[i][j]-c[i+1]*(w-1)<<endl;
if(f[i+1][k]-f[i][j]-c[i+1]*(w-1)>EPS)
{
f[i+1][k]=f[i][j]+c[i+1]*(w-1);
//if(i+1==m)cout<<f[i+1][k]<<endl;
g[i+1][k]=j;
}
}
}
}
}
//cout<<f[2][1]<<' '<<f[3][1]<<f[1][1]<<endl;
get_path(m,1);
//rep(1,m,i)put(w[i]);
//w[1]=100;w[3]=100;
ans[len=0]=1;
rep(1,m,i)
{
while(w[i])
{
rep(0,len,j)ans[j]=ans[j]*a[i];
rep(0,len,j)ans[j+1]+=ans[j]/mod,ans[j]%=mod;
if(ans[len+1])++len;--w[i];
}
}
printf("%d",ans[len]);
fep(len-1,0,i)printf("%06d",ans[i]);
return 0;
}

luogu P1128 [HNOI2001]求正整数 dp 高精度的更多相关文章

  1. BZOJ 1225: [HNOI2001] 求正整数( dfs + 高精度 )

    15 < log250000 < 16, 所以不会选超过16个质数, 然后暴力去跑dfs, 高精度计算最后答案.. ------------------------------------ ...

  2. P1128 [HNOI2001]求正整数

    传送门 rqy是我们的红太阳没有它我们就会死 可以考虑dp,设\(dp[i][j]\)表示只包含前\(j\)个质数的数中,因子个数为\(i\)的数的最小值是多少,那么有转移方程 \[f[i][j]=m ...

  3. 高精度+搜索+质数 BZOJ1225 [HNOI2001] 求正整数

    // 高精度+搜索+质数 BZOJ1225 [HNOI2001] 求正整数 // 思路: // http://blog.csdn.net/huzecong/article/details/847868 ...

  4. bzoj1225 [HNOI2001] 求正整数

    1225: [HNOI2001] 求正整数 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 762  Solved: 313[Submit][Statu ...

  5. [HNOI2001] 求正整数 - 背包dp,数论

    对于任意输入的正整数n,请编程求出具有n个不同因子的最小正整数m. Solution (乍一看很简单却搞了好久?我真是太菜了) 根据因子个数计算公式 若 \(m = \prod p_i^{q_i}\) ...

  6. BZOJ 1225: [HNOI2001] 求正整数 高精度+搜索+质数

    题意:给定n求,有n个因子的最小正整数. 题解:水题,zcr都会,我就不说什么了. 因数个数球求法应该知道,将m分解质因数,然后发现 a1^p1*a2^p2....an^pn这样一个式子, (1+p1 ...

  7. 【BZOJ】1225: [HNOI2001] 求正整数

    http://www.lydsy.com/JudgeOnline/problem.php?id=1225 题意:给一个数n,求一个最小的有n个约数的正整数.(n<=50000) #include ...

  8. [HNOI2001]求正整数

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

  9. 1166 矩阵取数游戏[区间dp+高精度]

    1166 矩阵取数游戏 2007年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description [ ...

随机推荐

  1. css div如何隐藏?

    在我们平时布局网站的时候,想要把div进行隐藏,但是很多人不知道css控制div显示隐藏?下面我们来讲解一下css如何让div隐藏. 1.使用display:none来隐藏div 我们可以使用disp ...

  2. 洛谷 P2220 [HAOI2012]容易题 数论

    洛谷 P2220 [HAOI2012]容易题 题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数 ...

  3. day76 vue框架入门

    目录 一.vue.js快速入门使用 1 vue.js库的下载 2 vue.js库的使用 3 vue.js的M-V-VM思想 4 显示数据 二.常用指令 1 操作属性 2 事件的绑定 3 样式操作 3. ...

  4. VSCode, 当今最流行的免费开源代码编辑器,微软出品,必属精品

    什么是VSCode? Visual Studio Code是一个轻量级但功能强大的源代码编辑器,可在您的桌面上运行,并且可用于Windows,macOS和Linux.它内置了对JavaScript,T ...

  5. [HCTF 2018]admin

    前言: 最近在BUUCTF刷题,参照师傅们wp后复现一下 0x01 拿到题目后进去如下界面 发现有登录和注册界面,相比是要登录后才能查看想要的信息. 查看页面源代码,看看有没有上面提示,界面如下 提示 ...

  6. day3 python数据类型转换及变量的缓存机制

    类型转换 1,强制类型转换 1.1 number的转换(int,float,bool,complex) num1 = 10 num2 = 10.6 num3 = True num4 = 3 + 4j ...

  7. [Qt插件]-02创建应用程序插件(插件化开发的一种思路)

    本篇是学习Qt Creator快速入门,插件开发的笔记   分为两部分 创建插件 使用插件的应用程序(测试插件)   插件是被使用的应用程序加载使用的. 是使用插件的应用程序定义接口,插件按照接口来实 ...

  8. C/C++中的 if(指针变量) 和 if(!指针变量)

    目录 if(指针变量) 代码演示 if(指针变量) 解读代码 if(!指针变量) 解读代码 总结 替代方案.推荐写法!!!!! if(指针变量) 当把一个指针作为条件表达式时,所要判断的条件实际上就是 ...

  9. OSCP Learning Notes - Buffer Overflows(1)

    Introduction to Buffer Overflows Anatomy of Memory Anatomy of the Stack Fuzzing Tools: Vulnserver -  ...

  10. C++语法小记---经典问题之一(一个空类包含什么)

    问题:一个空类包含什么 空的构造函数 拷贝构造函数(浅拷贝) 重载赋值操作符函数(浅拷贝) 析构函数 取址运算符 取址运算符const 注意 所有的这些默认函数,只有在代码中调用了才会生成,否则也不会 ...