uva 11728 Alternate Task
vjudge 上题目链接:uva 11728
其实是个数论水题,直接打表就行:
#include<cstdio>
#include<algorithm>
using namespace std; int ans[];
inline void init(int n = ) {
for(int i = ; i <= n; ++i) {
int sum = ;
for(int j = ; j <= i; ++j)
if(i % j == ) sum += j;
if(sum <= ) ans[sum] = i;
}
} int main() {
int s,Case = ;
init();
while(~scanf("%d",&s),s)
printf("Case %d: %d\n",++Case, !ans[s]? -: ans[s]);
return ;
}
可我一开始却杀鸡用了牛刀,想得超复杂,就因为大白书上提示"唯一分解定理,回溯"什么的,于是我就按着这样的思路去做了,结果写得超复杂,感觉过了也没有任何意义了。。。
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std; bool vis[];
int pri[];
inline int init_pri(int n = ) {
int c = ;
for(int i = ; i <= n; ++i)
if(!vis[i]) {
pri[++c] = i;
for(int j = i << ; j <= n; j += i) vis[j] = ;
}
return c;
} struct node {
int sum, p, r, pow;
node() {}
node(int sum, int p, int r, int pow): sum(sum), p(p), r(r), pow(pow) {}
bool operator < (const node & n2) const {
if(sum == n2.sum) return p < n2.p;
return sum < n2.sum;
}
void print() const {
printf("sum = %d p = %d r = %d pow = %d\n",sum,p,r,pow);
}
}; vector<node> fac; inline void init() {
init_pri();
for(int i = ; pri[i] <= ; ++i) {
int sum = , mul = , len = ;
while(sum <= ) {
mul *= pri[i];
sum += mul;
if(sum > ) break;
fac.push_back(node(sum, pri[i], ++len, mul));
}
}
sort(fac.begin(), fac.end());
} int find(const vector<node> &c, int low, int up, int x) {
int mid;
while(low <= up) {
mid = low + up >> ;
if(c[mid].sum == x) return mid;
else if(x < c[mid].sum) up = mid - ;
else low = mid + ;
}
return low;
} int ans;
bool sign[]; void dfs(int s, int id, int n) {
if(s == ) {
if(n > ans) ans = n;
return ;
}
if(s <= || id < ) return ;
if(!sign[fac[id].p] && s % fac[id].sum == ) {
sign[fac[id].p] = ;
dfs(s / fac[id].sum, id - , n * fac[id].pow);
sign[fac[id].p] = ;
}
dfs(s, id - , n);
} int main() {
int s, Case = ;
init();
while(~scanf("%d",&s), s) {
printf("Case %d: ",++Case);
if(s == ) {
puts("");
continue;
}
if(s == ) {
puts("-1");
continue;
}
ans = -;
int id = find(fac, , fac.size() - , s);
if(fac[id].sum > s) --id;
memset(sign, , sizeof(sign));
dfs(s, id, );
printf("%d\n",ans);
}
return ;
}
uva 11728 Alternate Task的更多相关文章
- uva 11728 - Alternate Task(数论)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011328934/article/details/36409469 option=com_onli ...
- UVA 11728 - Alternate Task (数论)
Uva 11728 - Alternate Task 题目链接 题意:给定一个因子和.求出相应是哪个数字 思路:数字不可能大于因子和,对于每一个数字去算出因子和,然后记录下来就可以 代码: #incl ...
- UVA 11728 - Alternate Task 数学
Little Hasan loves to play number games with his friends. One day they were playing a game whereone ...
- 【数论,水题】UVa 11728 - Alternate Task
题目链接 题意:给出一个数S,求一个最大的数,使这个数所有的因子之和为S; 这个所谓“因子之和”不知道有没有误导性,因为一开始以为得是素数才行.后来复习了下小学数学,比如12的因子分别是1,2,3,4 ...
- UVa 11728 Alternate Task (枚举)
题意:给定一个 n,求一个最大正整数 N 使得 N 的所有正因数和等于 n. 析:对于任何数一个 n,它的所有正因子都是大于等于本身的,因为 n 本身就是自己的正因数,这样的就可以直接暴力了,答案肯定 ...
- Alternate Task UVA - 11728 (暴力。。分解质因子)
题意: 输入一个正整数S,(S <= 1000)求一个最大的正整数N,使得N的所有正因子之和为S. 解析: ..求1000以内的所有数的正因子和 ...输出.. #include <io ...
- 10. Tasks and functions
Frm: IEEE Std 1364™-2001, IEEE Standard Verilog® Hardware Description Language 10. Tasks and functio ...
- 二分图最大匹配(匈牙利算法) UVA 670 The dog task
题目传送门 /* 题意:bob按照指定顺序行走,他的狗可以在他到达下一个点之前到一个景点并及时返回,问狗最多能走多少个景点 匈牙利算法:按照狗能否顺利到一个景点分为两个集合,套个模板 */ #incl ...
- UVA 10795 A Different Task(汉诺塔 递归))
A Different Task The (Three peg) Tower of Hanoi problem is a popular one in computer science. Briefl ...
随机推荐
- /proc/sysrq-trigger的功能 介绍
介绍/proc/sysrq-trigger的强大功能 让大家了解一下,在linux里,可以利用/proc/sysrq-trigger做些事情 # 立即重新启动计算机echo "b" ...
- hdu4935 Prime Tree(2014多校联合第七场)
首先这是一道dp题,对题意的把握和对状态的处理是解题关键. 题目给出的范围是n在1到1e11之间,由于在裂变过称中左儿子总是父亲节点的一个非平凡约数,容易看出裂变过程只与 素数幂有关,并且显然有素数不 ...
- 从客户端中检测到有潜在危险的 Request.Form 值
今天在使用Kindeditor的时候,出现了如题的错误. 错误如图: 百度了下,艰难的找了原来是Framework的问题,原来用的2.0,后面变成了4.0,验证级别也更高了: 解决办法:在config ...
- Java中的的XML文件读写
XML简介 要理解XML,HTML等格式,先来理解文档对象模型DOM 根据 DOM,HTML 文档中的每个成分都是一个节点,这些节点组成了一棵树.DOM 是这样规定的:整个文档是一个文档节点每个 HT ...
- WebForm 发送邮箱
首先在设置发件邮箱的SMTP服务,以新浪邮箱为例:设置区----客户端pop/imap/smtp----"POP3/SMTP服务"和"IMAP4服务/SMTP服务&quo ...
- SSH配置私钥登陆服务器
前言 本文基于实际Linux管理工作,实例讲解工作中使用ssh证书登录的实际流程,讲解ssh证书登录的配置原理,基于配置原理,解决实际工作中,windows下使用SecureCRT证书登录的各种问题, ...
- zookeeper系列之十一—zookeeper会话超时
1.会话概述 在Zookeeper中,客户端和服务端建立连接后,会话随之建立,生成一个全局唯一的会话ID(Session ID).服务器和客户端之间维持的是一个长连接,在SEESSION_TIMEOU ...
- struts2 + spring + mybatis 框架整合
在Eclipse下基于Maven整合Struts2,Spring和Mybatis3框架. 新建Maven project,type选择webapp 工程目录如下 修改pom.xml文件如下: < ...
- iOS中3种正则表达式的使用与比较
正则表达式在用户注册和登录中应用很广,通过正则表达式可以判断用户输入的数据正确与否. 在iOS4.0以前开发者一般是通过谓词(NSPredicate)和加入正则表达式的第三方库(如:RegexKitL ...
- 在Quartus II中分配管脚的两种常用方法
在Quartus II中分配管脚的两种常用方法 示范程序 seg7_test.v 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 /* * ...