H - Proper Nutrition简单的解方程题
耿直的题目描述
给3个数字n,a,b
求存不存在非负的整数X,Y满足X·a + Y·b = n。
简单的输入描述
第一行一个整数代表n(1 ≤ n ≤ 10 000 000)
第二行一个整数代表a(1 ≤ a ≤ 10 000 000)
第三行一个整数代表b(1 ≤ b ≤ 10 000 000)
直接的输出描述
如果不存在,直接输出NO
如果存在,直接输出YES
并且第二行输出X Y的值
如果有多组X Y满足条件,输出任意一组
不耿直的样例
Input
7
2
3
Output
YES
2 1
附上题目链接: [link](http://codeforces.com/problemset/problem/898/B).
一开始我使用x到无穷的循环去找符合条件的y,并没有设置x的循环终止条件,这样做很容易超时或者陷入死循环。
原题提到a,b都大于0那么方程中移项后x=(n-yb)/a,当y取0时有x的最大值n/a,故可以将x<=n/a设置为循环终止条件。
#include<cstdio>
int main(void)
{
long long n,a,b;
while(scanf("%lld%lld%lld",&n,&a,&b)!=EOF)
{
long long x;
int judge=0;
for (x=0;x<=(n/a);x++)//当y为0时x获得最大值,故循环上界条件为这个
{
if ((n-x*a)%b==0)//能整除则为整数同时满足方程
{
printf("YES\n%lld %lld",x,(n-x*a)/b);
judge=1;
break;
}
}
if (judge==0)
printf("NO\n");
}
return 0;
}