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

------------------------------------------------------------------------------

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
 
using namespace std;
 
const int maxn = 50009;
const int n = 16;
const int p[n] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53};
 
int N, ans[n], g[n], ansn;
double cur = 1e30;
 
void dfs(int x, int lim, double res, int cnt) {
if(res > cur) return;
if(cnt == N) {
if(res < cur) {
ansn = x;
for(int i = 0; i < x; i++) ans[i] = g[i];
cur = res;
}
} else {
if(x == n) return;
for(int i = 0; i <= lim; i++) if(cnt * (i + 1) <= N) {
g[x] = i;
dfs(x + 1, i, res + i * log(p[x]), cnt * (i + 1));
}
}
}
 
struct Int {
static const int base = 10000;
static const int width = 4;
static const int maxn = 1000;
int s[maxn], n;
Int() {
n = 0;
memset(s, 0, sizeof s);
}
Int(int x) {
n = 0;
for(; x; x /= base) s[n++] = x % base;
}
Int operator = (const Int &o) {
n = o.n;
memcpy(s, o.s, sizeof(int) * n);
return *this;
}
Int operator * (const Int &o) const {
Int ret; ret.n = n + o.n - 1;
for(int i = 0; i < n; i++)
for(int j = 0; j < o.n; j++) 
ret.s[i + j] += s[i] * o.s[j];
for(int i = 0; i < ret.n; i++) if(ret.s[i] >= base) {
ret.s[i + 1] += ret.s[i] / base;
ret.s[i] %= base;
}
for(int &i = ret.n; ret.s[i]; i++) if(ret.s[i] >= base) {
ret.s[i + 1] += ret.s[i] / base;
ret.s[i] %= base;
}
return ret;
}
void write() {
int buf[width], c;
for(int i = n; i--; ) {
c = 0;
for(int t = s[i]; t; t /= 10) buf[c++] = t % 10;
if(i != n - 1)
for(int j = width - c; j--; ) putchar('0');
while(c--) putchar(buf[c] + '0');
}
puts("");
}
};
 
int main() {
scanf("%d", &N);
dfs(0, N - 1, 0, 1);
Int res = 1;
for(int i = 0; i < ansn; i++) {
Int _p = p[i];
for(int j = 0; j < ans[i]; j++)
res = res * _p;
}
res.write();
return 0;
}

------------------------------------------------------------------------------

1225: [HNOI2001] 求正整数

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 576  Solved: 232
[Submit][Status][Discuss]

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

HINT

Source

Dp

BZOJ 1225: [HNOI2001] 求正整数( dfs + 高精度 )的更多相关文章

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

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

  2. luogu P1128 [HNOI2001]求正整数 dp 高精度

    LINK:求正整数 比较难的高精度. 容易想到贪心不过这个贪心的策略大多都能找到反例. 考虑dp. f[i][j]表示前i个质数此时n的值为j的最小的答案. 利用高精度dp不太现实.就算上FFT也会T ...

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

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

  4. bzoj1225 [HNOI2001] 求正整数

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

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

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

  6. [HNOI2001]求正整数

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

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

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

  8. P1128 [HNOI2001]求正整数

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

  9. 求正整数n所有可能的和式的组合(如;4=1+1+1+1、1+1+2、1+3、2+1+1、2+2

    作者:张小二 nyoj90 ,可以使用递归的方式直接计算个数,也可以通过把满足的个数求出来计数,因为在juLy博客上看到整数划分,所以重写了这个代码,就是列出所m的可能性,提交后正确.acmer的入门 ...

随机推荐

  1. pl sql 无法解析指定的连接标识符

        使用PLSQL Developer时,“ORA-12154: TNS:无法解析指定的连接标识符”问题的一个解决办法< xmlnamespace prefix ="o" ...

  2. android基于XMPP的消息推送机制

    关于服务器端向Android客户端的推送,主要有三种方式:1.客户端定时去服务端取或者保持一个长Socket,从本质讲这个不叫推送,这是去服务端拽数据.但是实现简单,主要缺点:耗电等2.Google的 ...

  3. Android SDK与API版本的对应关系

    看教程.开发Android程序等很多地方,需要设置Android SDK的版本,而其要我们写的却是API版本的数字, 为了方便查看 Android SDK与API版本的对应关系 我在SDK Manag ...

  4. Wide character in print at hcp.pl line 21.

    jrhmpt01:/root# cat -n hcp.pl 1 use LWP::UserAgent; 2 use Encode; 3 $ua = LWP::UserAgent->new; 4 ...

  5. smarty如何处理状态值的显示

    比如状态,有效或者无效.这个数据库中保存的是1或者2这样的字段. 显示在列表的时候不能是1或者2吧. 以前,我都是在后台foreach,处理的.感觉处理之后,前台就不灵活了.这个值就被替换成了文字. ...

  6. Orz 终于有了自己的博客地址

    新博客地址:http://www.wnjxyk.cn/

  7. FPGA STA(静态时序分析)

    1 FPGA设计过程中所遇到的路径有输入到触发器,触发器到触发器,触发器到输出,例如以下图所看到的: 这些路径与输入延时输出延时,建立和保持时序有关. 2. 应用背景 静态时序分析简称STA,它是一种 ...

  8. 简单使用SimpleCursorAdapter

    http://my.oschina.net/javaeye/blog/14846 果使用Sqlite,建议和ContentProvider结合使用.这样数据库的生命周期就不用自己管了.然后,如果要在比 ...

  9. Android设置Activity背景为透明style

    方法一: 通过Theme.Translucent @android:style/Theme.Translucent @android:style/Theme.Translucent.NoTitleBa ...

  10. POJ训练计划1459_Power Network(网络流最大流/Dinic)

    解题报告 这题建模实在是好建.,,好贱.., 给前向星给跪了,纯dinic的前向星居然TLE,sad.,,回头看看优化,.. 矩阵跑过了.2A,sad,,, /******************** ...