uva 12934

xiaoxiao2021-02-28  127

题目大意:

给你一个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; }

转载请注明原文地址: https://www.6miu.com/read-37742.html

最新回复(0)