题目描述

给出一个二元一次方程$ax+by=c$,其中$x$、$y$是未知数,求它的正整数解的数量。


输入格式

第一行一个整数$T$,表示有$T$组数据。
接下来$T$行,每行$3$个整数$a$、$b$、$c$。


输出格式

输出$T$行,每行一个数,表示方程解的数量。
如果正整数解的数量比$65535$还多,输出$“ZenMeZheMeDuo”$。


样例

样例输入:

3
-1 -1 -3
1 1 65536
1 1 65537

样例输出:

2
65535
ZenMeZheMeDuo


数据范围与提示

$20\%$的数据,$a=b=1$。
$40\%$的数据,$T \leqslant 100,1 \leqslant a,b,c \leqslant 1000$。
另$20\%$的数据,$a+b=c,1 \leqslant a,b,c \leqslant 1,000,000$。
另$20\%$的数据,$1 \leqslant a,b,c \leqslant 1,000,000$。
100%的数据,$T \leqslant 10,000,-1,000,000 \leqslant a,b,c \leqslant 1,000,000$。


题解

$20\%$算法:

对于$a=b=1$,那么解的个数为$\max(c-1,0)$,直接输出就好了。

$40\%$算法:

对于$1 \leqslant a,b,c \leqslant 1000$的数据,只需要暴力枚举$x$,$y$即可。

另$20\%$算法$1$:

对于$a+b=c$,直接输出$1$即可。

另$20\%$算法$2$:

考虑小学奥数知识,我们只需要暴力求出$x$或$y$的最小正整数解,然后每次加上$a$和$b$的$lcm$,看在$c$以内可以加多少次即可。

不过正解好像是扩展欧几里得,考场上的我并不会……

$100\%$算法:

其实是特判:

  $1.$如果$a,b$异号,如果$c \mod gcd(a,b)=0$,那么会有无穷多的解,否则无解。

  $2.$如果$a,b$同号但与$c$异号,那么无解。

  $3.$如果$a$或$b$等于$0$,如果$c$可以整除$b$且$b$为正整数,那么会有无穷多解,否则无解。


代码时刻

#include<bits/stdc++.h>
using namespace std;
int a,b,c;
int ans;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&a,&b,&c);
if(c<0)a=-a,b=-b,c=-c;//方便处理
if((long long)a*b<0LL)//a,b异号,注意开long long,否则会爆
{
if(c%__gcd(a,b))puts("0");
else puts("ZenMeZheMeDuo");
continue;
}
if(a<0&&b<0)//a,b同号但与c异号
{
puts("0");
continue;
}
if(!a)//为0的情况
{
if(c%b||c/b<0)puts("0");
else puts("ZenMeZheMeDuo");
continue;
}
if(!b)
{
if(c%a||c/a<0)puts("0");
else puts("ZenMeZheMeDuo");
continue;
}
if(a+b==c)
{
puts("1");
continue;
}
int biu=c;
int lcm=a*b/__gcd(a,b);
for(int i=a;i<=c;i+=a)
if(!((c-i)%b)){biu=i;break;}
if(biu==c){puts("0");continue;}//无解
ans=(c-biu)/lcm;
if((c-biu)%lcm)ans++;
if(ans>65535)puts("ZenMeZheMeDuo");//判断解的个数
else printf("%d\n",ans);
}
return 0;
}

rp++

最新文章

  1. jQuery/javascript实现网页注册的表单验证
  2. CentOS安装Chrome
  3. Windows操作系统的历史
  4. [原创]leet code - path sum
  5. (原)windows8.1上使用opencv for python
  6. quartz 定时调度持久化数据库配置文件
  7. JavaScript 闭包环境非常奇特 - 相当于类与实例的关系?!
  8. mysql慢查询问题
  9. html5 离线存储 地理信息与本地存储
  10. 运行Myeclipse时,如何删除IVM窗口
  11. java中的数据类型,运算符,字符串,输入输出,控制流,大数值,数组; 《java核心技术卷i》 第三章:java基本程序结构;
  12. lvs负载均衡概述
  13. 简单配置jena在eclipse的开发环境
  14. C memset
  15. cad 关键字被保留了?选择集关键字保留了? N S W E关键字无法用?
  16. Code First 数据迁移 转
  17. gtk-gnash大量占用cpu解决办法
  18. [javaSE] 集合框架(迭代器)
  19. 【深入理解JAVA虚拟机】读后感
  20. Mysql:存储过程游标不进循环的原因详解

热门文章

  1. mysql: show full processlist 详解
  2. python爬取b站排行榜
  3. 题解 AT1877 【回文分割】
  4. CSS 毛玻璃效果
  5. 01分数规划问题(二分法与Dinkelbach算法)
  6. tomcat下的日志配置详细说明
  7. Huawei交换机路由器远程Telnet配置
  8. mysql使用MRG_MyISAM(MERGE)实现水平分表
  9. Java第三阶段复习
  10. 20140919-FPGA-有效观察设计中的差分信号