1225: [HNOI2001] 求正整数

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 762  Solved: 313
[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
分析:这道题和反素数这道题非常像.
涉及到因数个数,可以很容易想到公式(k1 + 1) * (k2 + 1) *......*(kn + 1),那么先把可能的质数给求出来,枚举次数.这道题我们是预先知道了因数的个数,那么枚举的次数就要满足条件:+1后整除因数个数。dfs一下答案就出来了
      但是这样要用到高精度,每一次都高精度很麻烦啊,能不能在中间过程时不用高精度呢?可以的,只要我们在运算的时候取对数就好了.目的就是方便比大小,不用高精度,最后输出的时候用高精度就可以了.
只涉及到高精度数比大小并且满足对数运算律似乎都可以用对数运算来避免中途高精度运算.我感觉目前只能用到log(xy) = logx + logy和logx^k = k*logx,在搜索的时候分步运算合并即可.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cfloat> using namespace std; int n,prime[] = {,,,,,,,,,,,,,,,,},tot = ;
double minn = DBL_MAX,llg[];
int res[],ans[],p[],len; void print()
{
len = p[] = ;
for (int i = ; i <= ; i++)
{
for (;ans[i] > ;ans[i]--)
{
for (int j = ; j <= len; j++)
p[j] *= prime[i];
for (int j = ; j <= len; j++)
{
p[j + ] += p[j] / ;
p[j] %= ;
}
if (p[len + ])
len++;
while (p[len] / != )
{
p[len + ] += p[len] / ;
p[len] %= ;
len++;
}
}
}
for (int i = len; i >= ; i--)
printf("%d",p[i]);
printf("\n");
} void dfs(double sum,int cnt,int x)
{
if (sum >= minn)
return;
if (cnt == )
{
minn = sum;
memset(ans,,sizeof(ans));
for (int i = ; i <= x - ; i++)
ans[i] = res[i];
return;
}
if (x > )
return;
for (int i = ; (i + ) * (i + ) <= cnt; i++)
if (cnt % (i + ) == )
{
res[x] = i;
dfs(sum + i * llg[x],cnt / (i + ),x + );
if ((i +) * (i + ) != cnt)
{
res[x] = cnt / (i + ) - ;
dfs(sum + (cnt / (i + ) - ) * llg[x],i + ,x + );
}
}
} int main()
{
scanf("%d",&n);
for (int i = ; i <= ; i++)
llg[i] = log(prime[i]);
dfs(,n,);
print(); return ;
}
 

bzoj1225 [HNOI2001] 求正整数的更多相关文章

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

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

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

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

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

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

  4. 【BZOJ1225】求正整数(数论)

    题意:对于任意输入的正整数n,请编程求出具有n个不同因子的最小正整数m. n<=50000 思路:记得以前好像看的是maigo的题解 n即为将m分解为质数幂次的乘积后的次数+1之积 经检验只需要 ...

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

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

  6. [HNOI2001]求正整数

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

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

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

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

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

  9. P1128 [HNOI2001]求正整数

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

随机推荐

  1. ImportError: No module named flask.ext.wtf 解决方法

    install pip install flask.ext.wtf

  2. Java习题附答案

    第一章练习题(Java入门) 1.下列哪项不是JDK所包含的内容?(选一项)C 红色代表正确答案 A.Java编程语言 B.工具及工具的API C.Java EE扩展API D.Java平台虚拟机 2 ...

  3. PAT (Basic Level) Practise (中文)- 1026. 程序运行时间(15)

    PAT (Basic Level) Practise (中文)- 1026. 程序运行时间(15)    http://www.patest.cn/contests/pat-b-practise/10 ...

  4. mysql 复制中的 paxso 的两阶段和事务两阶段的区别

    1.普通的两阶段是 推送不同的数据给不同的主机,一旦出现网络中断,造成问题是不可服务. 因为本身有锁,故无所谓. 2.paxos 的两阶段是将相同的 数据给不同的主机,一旦超过半数即可认为成功.

  5. shell脚本,计算输入给定的数,判断最大值,最小值,总和?

    [root@localhost ~]# cat five.sh #!/bin/bash #任意输入5个数,判断最大值,最小值,总和 s= read -p "please input:&quo ...

  6. java在线聊天项目0.1版本 制作客户端窗体,使用swing(用户界面开发工具包)和awt(抽象窗口工具包)

    建立Chat项目,并在项目中创建窗口类 package com.swift; import java.awt.BorderLayout; import javax.swing.JFrame; impo ...

  7. [JOY]1143 飘飘乎居士的约会

    题目描述 又是美妙的一天,这天飘飘乎居士要和MM约会,因此他打扮的格外帅气.但是,因为打扮的时间花了太久,离约会的时间已经所剩无几. 幸运的是,现在飘飘乎居士得到了一张nm的地图,图中左上角是飘飘乎居 ...

  8. (60)zabbix网络发现介绍Network Discovery

    网络发现简介 网络发现有什么用?网络发现怎么配置? 我们带着这两个问题开始我们的网络发现之旅. 比如小明有100台服务器,不想一台台主机去添加,能不能让zabbix自动添加主机呢,当然可以,网络发现便 ...

  9. 分享读C Primer Plus时遇到的一个问题(补档5月7日)

    最近在学习C Primer Plus.书中第66页,3.8 关键概念 这一小节中有这一段话: “计算机中的浮点数和整数在本质上不同,其存储方式和运算过程有很大区别.即使两个 32 位存储单元存储的位组 ...

  10. 关于ajax在微信智能客服管理端的使用

    ajax的语法样例: $.ajax({ 'url':url, 'type':'GET', 'dataType':'json', 'data':data, success:function (data) ...