BZOJ 1225: [HNOI2001] 求正整数 高精度+搜索+质数
题意:给定n求,有n个因子的最小正整数。
题解:水题,zcr都会,我就不说什么了。
因数个数球求法应该知道,将m分解质因数,然后发现 a1^p1*a2^p2....an^pn这样一个式子,
(1+p1)*(1+p2)*...=n,然后用小的质数填坑。
#include <bits/stdc++.h>
using namespace std; int pri[] = {,,,,,,,,,,,,,,,,};
int n, ans[], res[], tmp[];
double lg[], mn=DBL_MAX; void input()
{
scanf("%d", &n);
for(int i=; i<=; i++) lg[i] = log(pri[i]);
} void dfs(double x, int y, int z){//现在的数是e^x,还剩下y个因子,选到第z个质数
if(x >= mn) return;
if(y == ){
mn = x;
memset(res, , sizeof(res));
for(int i=; i<=z-;i++) res[i]=tmp[i];
return;
}
if(z>) return;
for(int i = ; (i+)*(i+)<=y; i++){
if(y%(i+)==)
{
if(i != ){
tmp[z] = i;
dfs(x+lg[z]*i, y/(i+), z+);
}
if((i+)*(i+)!=y){
tmp[z] = y/(i+)-;
dfs(x+lg[z]*(y/(i+)-), i+, z+);
}
}
}
} void work()
{
dfs(, n, );
} void output()
{
ans[]=ans[]=;
for(int i=;i<=;i++){
for(;res[i]>;res[i]--){
for(int j=;j<=ans[];j++) ans[j]*=pri[i];
for(int j=;j<=ans[];j++) ans[j+]+=ans[j]/, ans[j]%=;
if(ans[ans[]+]!=) ans[]++;
while(ans[ans[]]/!=){
ans[ans[]+] += ans[ans[]]/;
ans[ans[]] %= ;
++ans[];
}
}
}
for(int i = ans[]; i>=; i--){
printf("%d", ans[i]);
}
printf("\n");
} int main()
{
input();
work();
output();
return ;
}
BZOJ 1225: [HNOI2001] 求正整数 高精度+搜索+质数的更多相关文章
- BZOJ 1225: [HNOI2001] 求正整数( dfs + 高精度 )
15 < log250000 < 16, 所以不会选超过16个质数, 然后暴力去跑dfs, 高精度计算最后答案.. ------------------------------------ ...
- 【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 ...
- 实验一:实现求正整数1-N之间所有质数的功能,并进行测试。
实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 命令行下的程序开 ...
随机推荐
- Retinex系列之Frankle-McCann Retinex 分类: Matlab 图像处理 2014-12-01 21:52 538人阅读 评论(2) 收藏
一.Frankle-McCann Retinex Frankle-McCann算法选择一条螺旋结构的路径用于像素间的比较.如下图,算法沿着螺旋路径选取用于比较 像素点,这种路径选择包含了整个图像的全局 ...
- Uncaught TypeError: Cannot set property 'f7View' of undefined 错误原因
// 添加视图var mainView = myApp.addView('.view-main', { // 因为我们要用动态的导航栏,我们需要使它的这一观点: dynamicNavbar: true ...
- thinkphp3.2.3连接sqlserver 2008 R2 数据库
环境: 操作系统——win7 64位旗舰版 PHP——thinkphp 3.23 数据库——Microsoft SQL Server 2008 R2 需要用到的软件: 步骤: 1.搜索SQLSRV30 ...
- Docker Java+Tomcat 环境搭建
软件环境:jdk.tomcat.docker.centos.虚拟机 首先,您要准备一个 CentOS 的操作系统,虚拟机也行.总之,可以通过 Linux 客户端工具访问到 CentOS 操作系统就行. ...
- Objective -C Memory Management 内存管理 第一部分
Objective -C Memory Management 内存管理 第一部分 Memory management is part of a more general problem in pr ...
- ubunut在线音乐比方软件
今天安装了一个音乐在线播放软件,忍不住要来赞一下, 之前一直都是用网页在线的qq音乐听的,这样就有点感觉不爽了, 今天突然想起来好像在网上看到的在ubuntu下有用网易云音乐的,就上网看了一下 还真的 ...
- Oracle数据库自定义函数练习20181031
--测试函数3 CREATE OR REPLACE FUNCTION FN_TEST3 (NUM IN VARCHAR2) RETURN VARCHAR2 IS TYPE VARCHAR2_ARR ) ...
- C#readonly 关键字与 const 关键字的区别
1. const 字段只能在该字段的声明中初始化,readonly 字段可以在声明或构造函数中初始化.因此,根据所使用的构造函数,readonly 字段可能具有不同的值. 2. const 字段是编译 ...
- JavaSE-18 常用工具类
学习要点 Object类 枚举 包装类 Math类 Random类 字符串处理 日期时间 Object类 1 什么是Object类 Object类存储在java.lang包中,是所有java类(Ob ...
- No-7.运算符
数学符号表链接:https://zh.wikipedia.org/wiki/数学符号表 01. 算数运算符 是完成基本的算术运算使用的符号,用来处理四则运算 运算符 描述 实例 + 加 10 + 20 ...