zoukankan      html  css  js  c++  java
  • 数学 方程的解

    这里写图片描述

    细节巨多的数学题。首先解出一组x最小的正整数解->ymax,同理求出ymin。就求出了解的个数。
    那么我来说说巨多的细节。
    1,解不出一组解来。
    2,a=0||b=0时,若另一个变量最小解小于零,无解;若能解出,就有无数组。
    3,a,b异号。

    #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();
    }
  • 相关阅读:
    bzoj3946
    bzoj3065
    bzoj1500
    bzoj1233
    bzoj1089
    bzoj1087
    bzoj1086
    if语句之猜拳
    if语句判断闰年、平年
    if语句判断身高体重是否标准
  • 原文地址:https://www.cnblogs.com/QTY2001/p/7632681.html
Copyright © 2011-2022 走看看