uva 12934

来源:互联网 发布:北京淘宝电商培训 编辑:程序博客网 时间:2024/06/07 03:16

题目大意:

给你一个K,问k是否是两个数阶乘相除得到的,输出最小的两个数


题目解析:

这是一个简单的数学题,首先当k=1时,Impossible,如果是奇数直接输出k,k-1,因为阶乘得到的都是偶数,最后当k是偶数的时候,再枚举就可以得到答案。


代码:

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;int flag,ans1,ans2;int main(){    //freopen("in.txt","r",stdin);    long long k;    int cas=0;    while(cin>>k)    {        int flag=0;        cas++;        if(k==1)        {            cout<<"Case "<<cas<<": Impossible"<<endl;            continue;        }        else if(k%2==1)        {            cout<<"Case "<<cas<<": "<<k<<" "<<k-1<<endl;            continue;        }        else        {            for(int i=2; i*i<k; i++)            {                long long n=i;                for(int j=i+1;;j++)                {                    n*=j;                    if(n==k)                    {                        flag=1;                        ans1=j;                        ans2=i-1;                        break;                    }                    if(n>k)                        break;                }                if(flag) break;            }            if(flag)                cout<<"Case "<<cas<<": "<<ans1<<" "<<ans2<<endl;        }    }    return 0;}


原创粉丝点击