codeforces 27 E. Number With The Given Amount Of Divisors(数论+dfs)
题目链接:http://codeforces.com/contest/27/problem/E
题意:问因数为n个的最小的数是多少。
题解:一般来说问到因数差不多都会想到素因子。
任意一个数x=(p1^a1)*(p2^a2)*(p3^a3)*......*(pn^an);p表示素数。
然后因子数就是ans=(a1+1)*(a2+1)*(a3+1)*....*(an+1) 这个很显然。然后要使得x最小而且ans最大
显然要优先选择最小的素数。
拿12=(2^2)*3为样例可以建一个搜索树于是dfs就可以按照这棵树来写。
//deep表示深度也就是素数的种类,sum表示组成的数,然后num表示因数个数,由于n最多为1000,2^10次为1024,所以理论上只要存10个素数就行了。
void dfs(int deep , ull sum , int num) {
if(num == n) ans = min(ans , sum);
for(int i = 1 ; i <= 1000 ; i++) {
if(num * (i + 1) > n || sum * prime[deep] > ans) break;//很明显的一个剪枝
dfs(deep + 1 , sum * prime[deep] , num * (i + 1));
sum *= prime[deep];
}
}
#include <iostream>
using namespace std;
typedef unsigned long long ull;
ull ans;
int prime[16] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53} , n;
void dfs(int deep , ull sum , int num) {
if(num == n) ans = min(ans , sum);
for(int i = 1 ; i <= 1000 ; i++) {
if(num * (i + 1) > n || sum * prime[deep] > ans) break;
dfs(deep + 1 , sum * prime[deep] , num * (i + 1));
sum *= prime[deep];
}
}
int main() {
cin >> n;
ans = ULLONG_MAX;
dfs(0 , 1 , 1);
cout << ans << endl;
return 0;
}
codeforces 27 E. Number With The Given Amount Of Divisors(数论+dfs)的更多相关文章
- Codeforces Beta Round #27 E. Number With The Given Amount Of Divisors 含n个约数最小数
		http://codeforces.com/problemset/problem/27/E RT,求含n个约数的最小的数 我们设答案p = 2^t1 * 3^t2 * -- * p^tk(其中p是第k ... 
- Codeforces Beta Round #27 (Codeforces format, Div. 2) E. Number With The Given Amount Of Divisors 反素数
		E. Number With The Given Amount Of Divisors time limit per test 2 seconds memory limit per test 256 ... 
- codeforces 27E Number With The Given Amount Of Divisors
		E. Number With The Given Amount Of Divisors time limit per test 2 seconds memory limit per test 256 ... 
- E. Number With The Given Amount Of Divisors
		E. Number With The Given Amount Of Divisors time limit per test 2 seconds memory limit per test 256 ... 
- Codeforces 27E. Number With The Given Amount Of Divisors (暴力)
		题目链接:http://codeforces.com/problemset/problem/27/E 暴力 //#pragma comment(linker, "/STACK:1024000 ... 
- codeforces 27E . Number With The Given Amount Of Divisors   搜索+数论
		题目链接 首先要知道一个性质, 一个数x的因子个数等于 a1^p1 * a2^p2*....an^pn, ai是x质因子, p是质因子的个数. 然后就可以搜了 #include <iostrea ... 
- 大家一起做训练 第一场 E Number With The Given Amount Of Divisors
		题目来源:CodeForce #27 E 题目意思和题目标题一样,给一个n,求约数的个数恰好为n个的最小的数.保证答案在1018内. Orz,这题训练的时候没写出来. 这道题目分析一下,1018的不大 ... 
- 【数学】【CF27E】 Number With The Given Amount Of Divisors
		传送门 Description 给定一个正整数\(n\),输出最小的整数,满足这个整数有n个因子 Input 一行一个整数\(n\) Output 一行一个整数,代表答案. Hint \(1~\leq ... 
- 数论  CF27E Number With The Given Amount Of Divisors
		求因子数一定的最小数(反素数) #include<iostream> #include<string> #include<cmath> #include<cs ... 
随机推荐
- 后端开发实践系列之二——领域驱动设计(DDD)编码实践
			Martin Fowler在<企业应用架构模式>一书中写道: I found this(business logic) a curious term because there are f ... 
- dubbo文档笔记
			配置覆盖关系 以 timeout 为例,显示了配置的查找顺序,其它 retries, loadbalance, actives 等类似: 方法级优先,接口级次之,全局配置再次之. 如果级别一样,则消费 ... 
- WebSocket的实现与应用
			WebSocket的实现与应用 前言 说到websocket,就不得不提http协议的连接特点特点与交互模型. 首先,http协议的特点是无状态连接.即http的前一次连接与后一次连接是相互独立的. ... 
- snort规则中byte_test参数详解
			例子: byte_test:4,>,1000,20 这里是从本规则内前面匹配的位置结尾开始,向后偏移20个字节,再获取后面的4个字节的数据,与十进制数据1000进行比较,如果大于1000,就命中 ... 
- ASP.NET Core Web API 跨域(CORS) Cookie问题
			身为一个Web API,处理来自跨域不同源的请求,是一件十分合理的事情. 先上已有的文章,快速复制粘贴,启用CORS: Microsoft:启用 ASP.NET Core 中的跨域请求 (CORS) ... 
- python 闭包,装饰器,random,os,sys,shutil,shelve,ConfigParser,hashlib模块
			闭包 def make_arerage(): l1 = [] def average(price): l1.append(price) total = sum(l1) return total/len ... 
- SAP-采购订单跟踪报表
			*&---------------------------------------------------------------------**& Report ZMM_CGDDFX ... 
- ArcGIS数据格式详解
- 写给新手的 Go 开发指南
			转眼加入蚂蚁已经三个多月,这期间主要维护一 Go 写的服务器.虽然用的时间不算长,但还是积累了一些心得体会,这里总结归纳一下,供想尝试 Go 的同学参考. 本文会依次介绍 Go 的设计理念.开发环境. ... 
- Go调度器介绍和容易忽视的问题
			本文记录了本人对Golang调度器的理解和跟踪调度器的方法,特别是一个容易忽略的goroutine执行顺序问题,看了很多篇Golang调度器的文章都没提到这个点,分享出来一起学习,欢迎交流指正. 什么 ... 
