题意:及其无聊的一道题目,以前做STl专题的时候,曾经做过一道求一个数的所有约数之和的题目,该题和那道题刚好相反,是给你一个数的约数之和,问这个数可能是多少!
题目:还能咋办,直接打表筛一遍就ok了,先打一张所有数的因数之和的表,然后来一个,查一下表就行了,水题!
code:
题目:还能咋办,直接打表筛一遍就ok了,先打一张所有数的因数之和的表,然后来一个,查一下表就行了,水题!
code:
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int N=1005;
vector<int>v(N,0);
void init() //自以为打的很好一张表,优于教材的算法
{
int n,m,i,j,sum;
for(i=1;i<N;i++)
for(j=1;i*j<N;j++)
v[i*j]+=i;
}
int cal (int n)
{
for (int i=n;i>=1;i--)
if (v[i]==n)
return i;
return -1;
}
int main()
{
init();
int n,ca=1;
while (~scanf("%d",&n)&&n)
printf("Case %d: %d\n",ca++,cal(n));
return 0;
}