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++;
    }
}

 

posted @ 2016-04-29 12:11  哲贤  阅读(106)  评论(0编辑  收藏  举报