同:http://hao666.info/blog/?p=24
题目
An easy problem
题目详情:
对于给定的n,m∈N,求正整数c满足:
(1)∀x,y ∈N, ∃ε0>0(ε0 ∈ R),s.t |n*x+m*y-c|>ε0.
(2)∀d ∈N 且 d>c,∃x'∈N,y'∈N,s.t ∀ε>0 ,均有|n*x'+m*y'-d|<ε.
其中 gcd(n,m)=1 , 以上整数均在long long 范围内.
输入为多组测试案例
每个测试样例占一行,包括n m
每个测试占一行,输出c,(如果不存在c输出“impossible.”)
答题说明:
输入样例:
2 3
5 9
输出样例:
1
31
解法
由题目详情得:m,n均为大于等于0的整数,所求结果c为正整数,
∀x,y ∈N, ∃ε0>0(ε0 ∈ R),s.t |n*x+m*y-c|>ε0. ==> 对于任意大于等于0的x、y,均不满足n*x+m*y=c
∀d ∈N 且 d>c,∃x'∈N,y'∈N,s.t ∀ε>0 ,均有|n*x'+m*y'-d|<ε. ==>n*x+m*y能凑出任意比c大的值。
n*x+m*y能取到所有[k,正无穷)的正整数,而n*x+m*y取不到k-1,那么c=k即为所求,注意c为正整数。
代码
#include <iostream>
#include <cstdlib>
#include <algorithm>
int main(int argc,char** argv){
long long n=0;
long long m=0;
long long c=0;
while(std::cin>>n>>m){
c=0;
if(n>m)
std::swap(n,m);
if(0==m||0==n)
c=0;
else if(1==n)//0==m%n
c=0;//n-1
else
c=n*(m-2)-(m-n);//m*n-(m+n)
if(0==c)
std::cout<<"impossible."<<std::endl;
else
std::cout<<c<<std::endl;
}
return EXIT_SUCCESS;
}