题意:
输入一个正整数S,(S <= 1000)求一个最大的正整数N,使得N的所有正因子之和为S。
解析:
。。求1000以内的所有数的正因子和 。。。输出。。
#include <iostream> #include <cstdio> #include <sstream> #include <cstring> #include <map> #include <set> #include <vector> #include <stack> #include <queue> #include <algorithm> #include <cmath> #define MOD 2018 #define LL long long #define ULL unsigned long long #define Pair pair<int, int> #define mem(a, b) memset(a, b, sizeof(a)) #define _ ios_base::sync_with_stdio(0),cin.tie(0) //freopen("1.txt", "r", stdin); using namespace std; const int maxn = 10010, INF = 0x7fffffff; int sum[maxn]; void init() { for(int i= 1; i<1005; i++) { for(int j=1; j<=i; j++) { if(i % j) continue; sum[i] += j; } } } int main() { int n, kase = 0; init(); while(cin>> n && n) { int ok = 1; if(n == 1) { printf("Case %d: %d ",++kase, 1); continue; } for(int i=1000; i>=1; i--) { if(sum[i] == n) { ok = 0; printf("Case %d: %d ",++kase, i); break; } } if(ok) printf("Case %d: %d ",++kase, -1); } return 0; }