uva11728alternate task所有因子
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85482#problem/F
题意是输入的数是输出数所有因子的加和。
这里从输出推输入,范围很小。
输出的数至少能分出1和它本身,则加和一定大于输出数,即输入的数一定大于输出数,因为数的范围很小,所以可以从输入数向前遍历,将每一个数的所有因子加起来,与输入数相等,则为输出数。
#include<iostream> using namespace std; int f(int a) { int sum=0; for(int i=1;i<=a;i++) { if(a%i==0)sum+=i; } return sum; } int main() { int t,flag=1; cin>>t; while(t!=0) { int ch=0; for(int j=0;j<t;j++) { if(f(t-j)==t){cout<<"Case "<<flag<<": "<<t-j<<endl;ch=1;break;} } if(ch==0)cout<<"Case "<<flag<<": "<<-1<<endl; cin>>t; flag++; } }