数学 方程的解
細(xì)節(jié)巨多的數(shù)學(xué)題。首先解出一組x最小的正整數(shù)解->ymax,同理求出ymin。就求出了解的個(gè)數(shù)。
那么我來(lái)說(shuō)說(shuō)巨多的細(xì)節(jié)。
1,解不出一組解來(lái)。
2,a=0||b=0時(shí),若另一個(gè)變量最小解小于零,無(wú)解;若能解出,就有無(wú)數(shù)組。
3,a,b異號(hào)。
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 10005
#define ll long long
using namespace std;
int t;
inline void exgcd(ll a,ll b,ll c,ll &x,ll &y,ll &g)
{if(!b){g=a;y=0;x=c/a;}else {exgcd(b,a%b,c,y,x,g);y-=(a/b)*x;}
}
inline void hh()
{ll a,b,c,x,y,sum,g;bool aa=0,bb=0;scanf("%lld%lld%lld",&a,&b,&c);if(!a&&!b){if(!c)printf("ZenMeZheMeDuo\n");else printf("0\n");return;}if(c<0)a=-a,b=-b,c=-c;if(a<0)a=-a,aa=1;if(b<0)b=-b,bb=1;exgcd(a,b,c,x,y,g);if(a*x+b*y!=c){printf("0\n");return;}if(aa)x=-x,a=-a;if(bb)y=-y,b=-b;if(a==0){if(y<=0)printf("0\n");else printf("ZenMeZheMeDuo\n");return;}if(b==0){if(x<=0)printf("0\n");else printf("ZenMeZheMeDuo\n");return;}if((a<0&&b>0)||(a>0&&b<0)){printf("ZenMeZheMeDuo\n");return;}if(a<0)a=-a,b=-b,c=-c;a/=g;b/=g;c/=g;x%=b;while(x<=0)x+=b;y=(c-a*x)/b;ll y1=y%a;while(y1<=0)y1+=a;int ans;if(y1>y)ans=0;else ans=(y-y1)/a+1;if(ans>65535)printf("ZenMeZheMeDuo\n");else printf("%d\n",ans);
}
int main()
{//freopen("fuction.in","r",stdin);//freopen("fuction.out","w",stdout);cin>>t;while(t--)hh();
}
轉(zhuǎn)載于:https://www.cnblogs.com/QTY2001/p/7632681.html
總結(jié)
- 上一篇: 求一个加油个性签名。
- 下一篇: 好听的母警犬名字大全