【数论,水题】UVa 11728 - Alternate Task
2015-03-21 14:21
274 查看
题意:给出一个数S,求一个最大的数,使这个数所有的因子之和为S;
这个所谓“因子之和”不知道有没有误导性,因为一开始以为得是素数才行。后来复习了下小学数学,比如12的因子分别是1,2,3,4,6,12...
我竟无言以对T^T...
感觉复杂度应该能继续优化的。。没想到好的。。
代码:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> using namespace std; const int maxn = 1010; int vis[maxn], prime[maxn], cnt; void pre() { int m = sqrt(maxn+0.5); vis[0] = 1; vis[1] = 1; for(int i = 2; i <= m; i++) if(!vis[i]) for(int j = i*i; j < maxn; j+=i) vis[j] = 1; cnt = 0; for(int i = 2; i < maxn; i++) if(!vis[i]) prime[cnt++] = i; } int main() { pre(); int S, kase = 0; while(~scanf("%d", &S) && S) { if(S == 1) {printf("Case %d: 1\n", ++kase); continue;} bool exist = false; int i; for(i = S-1; i >= 1; i--) { // if(!vis[i]) // { //cout << i << endl; int sum = 0; bool ok = true; for(int j = 1; j <= sqrt(i); j++) { int tmp = i/j; //cout << tmp << endl; if(sum > S) {ok = false; break;} if(tmp*j != i) continue; if(tmp != j) sum += j; sum += tmp; } if(sum == S) {exist = true; break;} // } } if(exist) printf("Case %d: %d\n", ++kase, i); else printf("Case %d: -1\n", ++kase); } return 0; }View Code
相关文章推荐
- UVA 11728 - Alternate Task (数论)
- UVA 11728 - Alternate Task (数论)
- uva 11728 - Alternate Task(数论)
- uva 11728——Alternate Task
- uva 11728 Alternate Task
- UVa 11728 - Alternate Task
- 【数论,水题】UVa 10127 - Ones
- UVA - 11728 Alternate Task (唯一分解定理)
- UVA 11728 - Alternate Task(线性筛)
- Uva 数论&&计算几何 几个水题
- UVA-11728 Alternate Task
- UVa 11728 Alternate Task (逆因子和)
- Uva 10339 - Watching Watches【数论,暴力】
- uva 110 Meta-Loopless Sorts 用程序写程序 有点复杂的回溯水题
- uva 10290 {Sum+=i++} to Reach N (数论-整数和素数)
- UVA 11582 - Colossal Fibonacci Numbers!(数论)(分治法幂取模)
- 【数论】[Uva12169]Disgruntled Judge
- UVA 11768 - Lattice Point or Not(数论)
- uva 10692 - Huge Mods(数论)
- HDU 1019 数论 GCD和MCM 水题