题目描述

给出一个二元一次方程$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++

[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. 前端 CSS 盒子模型 边框 border属性

    边框 border:边框的意思,描述盒子的边框 边框有三个要素: 粗细 线性样式 颜色 border: solid border特性 如果颜色不写,默认是黑色.如果粗细不写,不显示边框.如果只写线性样 ...

  2. BSP中uboot初体验

    一. uboot源码获取 1.1. 从板级厂家获取开发板BSP级uboot(就是由开发板厂家提供的) 1.2. 从SOC厂家获取相同SOC的BSP级uboot 1.3. 从uboot官方下载 1.4. ...

  3. 给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回

    给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回 //统计字符串中出现的字符的出现次数 public function strNum(){ ...

  4. angular 示例项目

    cnpm install 环境安装好后,快速创建一个新项目,如在D盘下新建一个angularProject项目,只要在本地目录下 ng new angularProject angularProjec ...

  5. django编辑框实现

    一些常用的: CKEditor UEEditor TinyEditor KindEditor 下载: http://kindeditor.net/down.php 使用方法: <textarea ...

  6. SQL性能优化概要

    基本概要 1.查询的模糊匹配时,避免使用Like '%开头',使得索引失效 2.索引问题 ◆ 避免对索引字段进行运算操作和使用函数 ◆ 避免在索引字段上使用not,<>,!= ◆ 避免在索 ...

  7. pycharm链接数据库以及连接时候出现错误的集合

    1.pycharm如何直接连接数据库? 作用:这是一种管理数据库的方式而已,因为在开发过程中结合使用还是不错的!当然,还有有很多管理数据库的工具和方法. 比如:navicat工具 1.1  如何找到管 ...

  8. linux下的数据备份工具rsync讲解

    linux下的数据备份工具 rsync(remote sync 远程同步)   名词解释: sync(Synchronize,即“同步”)为UNIX操作系统的标准系统调用,功能为将内核文件系统缓冲区的 ...

  9. Linux vim程序编辑器

    Tips: 在 vi 里面, [tab] 这个按钮所得到的结果与空格符所得到的结果是不一样的,特别强调一下! 一般模式 移动光标 30↓ 向下移动30行 40→ 向右移动40个字符 gg 移动到档案第 ...

  10. web框架-(二)Django基础

    上面我们已经知道Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Sessi ...