UVa:11728 Alternate Task

来源:互联网 发布:百度软件 编辑:程序博客网 时间:2024/05/29 15:27

简单题,只需要从S开始,从大到小枚举,取第一个所有正因子之和为S的即可。

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <vector>#include <algorithm>#define ll long long#define INF 2139062143#define MAXN 100005using namespace std;int S;bool Judge(int val){    int q=sqrt(val+0.5);    int res=0;    for(int i=1; i<=q; ++i)        if(val%i==0)        {            if(i==val/i) res+=i;            else res+=i+val/i;        }    return res==S;}int main(){    int kase=0;    while(scanf("%d",&S)&&S)    {        int ans=-1;        for(int i=S; i>=1; --i)            if(Judge(i))            {                ans=i;                break;            }        printf("Case %d: %d\n",++kase,ans);    }    return 0;}


 

0 0
原创粉丝点击