codeforces 27E . Number With The Given Amount Of Divisors 搜索+数论
2016-03-12 16:38
309 查看
题目链接
首先要知道一个性质, 一个数x的因子个数等于 a1^p1 * a2^p2*....an^pn, ai是x质因子, p是质因子的个数。
然后就可以搜了
首先要知道一个性质, 一个数x的因子个数等于 a1^p1 * a2^p2*....an^pn, ai是x质因子, p是质因子的个数。
然后就可以搜了
#include <iostream> #include <vector> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <map> #include <set> #include <string> #include <queue> #include <stack> #include <bitset> using namespace std; #define pb(x) push_back(x) #define ll long long #define mk(x, y) make_pair(x, y) #define lson l, m, rt<<1 #define mem(a) memset(a, 0, sizeof(a)) #define rson m+1, r, rt<<1|1 #define mem1(a) memset(a, -1, sizeof(a)) #define mem2(a) memset(a, 0x3f, sizeof(a)) #define rep(i, n, a) for(int i = a; i<n; i++) #define fi first #define se second typedef pair<int, int> pll; const double PI = acos(-1.0); const double eps = 1e-8; const int mod = 1e9+7; const int inf = 1061109567; const int dir[][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} }; int n, f[105], prime[20], cnt; ll ans = 1e18+2; void dfs(int pos, int num, ll val) { if(pos>16) return ; if(num>n) return ; if(num == n) { ans = min(ans, val); return ; } for(int i = 1; i<=60; i++) { val *= prime[pos]; if(val>ans) break; dfs(pos+1, num*(i+1), val); } } int main() { cin>>n; for(int i = 2; i<100; i++) { if(!f[i]) { for(int j = i+i; j<100; j+=i) { f[j] = 1; } prime[cnt++] = i; } } dfs(0, 1, 1); cout<<ans<<endl; return 0; }
相关文章推荐
- HTML5 开发概述
- Logistic回归(随机梯度上升)
- HTML页面特殊字符代码
- 用动态规划解决最长公共子序列
- 搜索区间
- 用动态规划解决最长公共子序列
- 【WebService】——SOAP、WSDL和UDDI
- WEB前端规范(一)--HTML规范
- Java中String、StringBuilder以及StringBuffer
- pspo过程文档
- Linux下使用parted划分GPT分区
- Mac 下安装 MySQL 以及 Oracle SQL Developer 连接本地 MySQL
- laravel 学习笔记一 (异常处理)
- win7系统怎么重新安装IE8浏览器?win7系统重新安装IE8浏览器的图文教程
- 跨终端开发必备概念汇总
- 在android中如何使用全局变量
- nyoj 2括号匹配 栈入门
- SQOOP——MySQL 和 HDFS 的桥梁
- Struts2默认拦截器解析
- 如何快糙好猛地在Windows下编译CAFFE并使用其matlab和python接口