题目描述

给出一个二元一次方程$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$为正整数,那么会有无穷多解,否则无解。


代码时刻

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int a,b,c;
  4. int ans;
  5. int main()
  6. {
  7. int T;
  8. scanf("%d",&T);
  9. while(T--)
  10. {
  11. scanf("%d%d%d",&a,&b,&c);
  12. if(c<0)a=-a,b=-b,c=-c;//方便处理
  13. if((long long)a*b<0LL)//a,b异号,注意开long long,否则会爆
  14. {
  15. if(c%__gcd(a,b))puts("0");
  16. else puts("ZenMeZheMeDuo");
  17. continue;
  18. }
  19. if(a<0&&b<0)//a,b同号但与c异号
  20. {
  21. puts("0");
  22. continue;
  23. }
  24. if(!a)//为0的情况
  25. {
  26. if(c%b||c/b<0)puts("0");
  27. else puts("ZenMeZheMeDuo");
  28. continue;
  29. }
  30. if(!b)
  31. {
  32. if(c%a||c/a<0)puts("0");
  33. else puts("ZenMeZheMeDuo");
  34. continue;
  35. }
  36. if(a+b==c)
  37. {
  38. puts("1");
  39. continue;
  40. }
  41. int biu=c;
  42. int lcm=a*b/__gcd(a,b);
  43. for(int i=a;i<=c;i+=a)
  44. if(!((c-i)%b)){biu=i;break;}
  45. if(biu==c){puts("0");continue;}//无解
  46. ans=(c-biu)/lcm;
  47. if((c-biu)%lcm)ans++;
  48. if(ans>65535)puts("ZenMeZheMeDuo");//判断解的个数
  49. else printf("%d\n",ans);
  50. }
  51. return 0;
  52. }

rp++

[CSP-S模拟测试]:方程的解(小学奥数)的更多相关文章

  1. python基础===一道小学奥数题的解法

    今早在博客园和大家分享了一道昨晚微博中看到的小学奥数题,后来有朋友给出了答案.然后我尝试用python解答它. 原题是这样的: 数学题:好事好 + 要做好 = 要做好事,求 “好.事.做.要”的值分别 ...

  2. 【GDKOI2017】 两个胖子萌萌哒 小学奥数题

    题目大意:给你一个$n\times m$的网格,你要在这个网格上画三角形. 三角形的顶点只能在网格的整点上,且至少有一条边平行于$x$或$y$轴,且三角形面积为整数.问你能画多少个不同的三角形. 两个 ...

  3. luogu 1258 小车问题 小学奥数(?)

    题目链接 题意 甲.乙两人同时从A地出发要尽快同时赶到B地.出发时A地有一辆小车,可是这辆小车除了驾驶员外只能带一人.已知甲.乙两人的步行速度一样,且小于车的速度.问:怎样利用小车才能使两人尽快同时到 ...

  4. NOI上看到的几个小学奥数

    :余数相同问题 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 已知三个正整数 a,b,c. 现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同 ...

  5. NOIp 数学 (小学奥数)

    Basic knowledge \[ C_n^m=\frac{n!}{m!(n - m)!} \] 快速幂 // Pure Quickpow inline int qpow(int n, int m, ...

  6. Android单元测试与模拟测试详解

    测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...

  7. 模拟7题解 T1方程的解

    方程的解 [扩展欧几里德] 首先进行特判,两个小时基本想到了,除了a!=0,b==0,a*c<0这种情况 其次就是一般情况: 首先exgcd求出ax+by=GCD(a,b)的一组任意解 然后两边 ...

  8. [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)

    目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...

  9. Spring MVC测试框架详解——服务端测试

    随着RESTful Web Service的流行,测试对外的Service是否满足期望也变的必要的.从Spring 3.2开始Spring了Spring Web测试框架,如果版本低于3.2,请使用sp ...

随机推荐

  1. Win10使用自带功能创建系统映像备份时D盘被包含进去问题的解决

    在使用Windows10系统时,使用Windows自带功能创建系统映像备份文件时碰到了一些问题,所以在此记录一下. 创建系统映像文件的步骤,如下: 1.打开 控制面板 -> 选择 系统和安全 - ...

  2. CF和OF的区别

    进位标志CF和溢出标志OF的区别: 有符号数和无符号数只是认为的进行区分,计算机从来不区分有符号数和无符号数.对于运算的数来说,只要符合进位的情况,CF就置1.只要符合溢出的情况,OF就置1.但是后续 ...

  3. Spark出现java.lang.stackoverflowerror的解决方法

    正在测试的程序需要多次迭代(400+次),每次迭代有复杂的运算 迭代到100多次的时候报java.lang.stackoverflowerror的错误 解决方法:先checkpoint()再count ...

  4. Vue:Elementui中的Tag与页面其它元素相互交互的两三事

    前言 公司系统在用elementui做后台开发,不免遇到一些需要自己去根据原有的功能上,加一些交互的功能.今天来介绍下我在用elementUi里的Tag标签与多选框交互的过程,东西听上去很简单,但就是 ...

  5. IDEA 增加对JPA的支持 执行JPQL语句

    IDEA 可以在控制台console中执行JPQL语句: 1. 在已存在的项目中选择项目结构: 2. 选择模块-指定实体所在的模块-选择上面的号 2. 选择要添加的模块:我们使用的是JPA,也可能有的 ...

  6. [七月挑选]使用idea创建spring boot 项目

    title: 使用idea创建spring boot 项目 参考lindaZ的IntelliJ IDEA 创建spring boot 的Hello World 项目 1.Open IDEA,choos ...

  7. How Does Caching Work in AFNetworking? : AFImageCache & NSUrlCache Explained

    http://blog.originate.com/blog/2014/02/20/afimagecache-vs-nsurlcache/

  8. git设置Eclipse中忽略的文件

    GitHub 官网样例文件https://github.com/github/gitignorehttps://github.com/github/gitignore/blob/master/Java ...

  9. C scanf 函数的其他使用注意点

    1.scanf 函数中没有精度控制,如: scanf("%5.2f", &a )是非法的,不能企图用此语句数据小数位2位的实数 2.scanf中要求给出变量地址,如给出变量 ...

  10. 004-sed 命令使用

    sed 命令使用 主要作用是用来将数据进行选取,替换,删除,新增的命令,与vim类似 选项: -n : 只显示经过sed处理的数据,打印到屏幕 -e: 运行多个条件同时运行 -i: 直接修改文件 -p ...