【XR-4】题
题面
题解
由题,所求为方程\(y^2 = x^2 + ax + b\)的整数解数量。
两边同乘\(4\),可得\((2y)^2 = 4x^2 + 4ax + 4b\)。
配方后得\((2y)^2 = (2x + a)^2 + 4b - a^2\)。
移项得\((2y + 2x + a)(2y - 2x - a) = 4b - a^2\)。
于是将\(4b - a^2\)的约数求出来,解一个二元一次方程就行了。
同时如果\(4b - a^2 = 0\),那么此时如果\(a\)是偶数输出inf,\(a\)是奇数输出0。
又\(|4b - a^2|\)最大可能达到\(10^{16}\),分解质因数可能需要Pollard_Rho。
代码
#include <cstdio>
#include <algorithm>
#include <vector>
long long A, B, C; int ans, f;
long long Mul(long long x, long long y, long long Mod)
{ return (__int128) x * y % Mod; }
long long fastpow(long long x, long long y, long long Mod)
{
long long ans = 1;
for (; y; y >>= 1, x = Mul(x, x, Mod))
if (y & 1) ans = Mul(ans, x, Mod);
return ans;
}
bool Miller_Rabin(long long x)
{
if (x == 2) return true;
if ((x & 1) == 0) return false;
for (int T = 10; T; T--)
{
long long a = 1ll * rand() * rand() % (x - 2) + 2;
if (fastpow(a, x - 1, x) != 1) return false;
long long p = x - 1;
while (!(p & 1))
{
p >>= 1; long long t = fastpow(a, p, x);
if (Mul(t, t, x) == 1 && t != 1 && t != x - 1) return false;
}
}
return true;
}
long long Pollard_Rho(long long n)
{
if ((n & 1) == 0) return 2;
long long c = 1ll * rand() * rand() % (n - 1) + 1;
long long i = 0, k = 2, x = 1ll * rand() * rand() % (n - 1) + 1, y = x;
while (1)
{
++i, x = (Mul(x, x, n) + c) % n;
long long d = std::__gcd((y - x + n) % n, n);
if (d != 1 && d != n) return d;
if (x == y) return n;
if (i == k) y = x, k <<= 1;
}
}
std::vector<long long> fac;
void Fact(long long n)
{
if (n == 1) return;
if (Miller_Rabin(n)) return (void) (fac.push_back(n));
long long p = n; while (p == n) p = Pollard_Rho(n);
Fact(p), Fact(n / p);
}
__int128 sqr(__int128 x) { return x * x; }
int check(long long p, long long q)
{
long long xy = p - A, yx = q + A; int cnt = 0;
if ((abs(xy) & 1) || (abs(yx) & 1) || ((p + q) & 3)) return 0;
long long x = (xy + yx) / 4, y = (xy - x * 2) / 2;
if (x >= 0 && y >= 0) ++cnt;
return cnt;
}
void dfs(long long x, int dep)
{
ans += check(x, f * C / x);
for (int j = dep; j < (int) fac.size(); j++)
{
long long t = fac[j], s = x * t;
for (; C % s == 0; s = s * t) dfs(s, j + 1);
}
}
int main()
{
scanf("%lld%lld", &A, &B); C = B * 4 - A * A, f = 1;
if (C < 0) C = -C, f = -1; if (C == 0) return printf(A & 1 ? "0" : "inf"), 0;
Fact(C), std::sort(fac.begin(), fac.end());
fac.erase(std::unique(fac.begin(), fac.end()), fac.end());
dfs(1, 0), printf("%d\n", ans);
return 0;
}
【XR-4】题的更多相关文章
- C算法编程题(五)“E”的变换
前言 上一篇<C算法编程题(四)上三角> 插几句话,说说最近自己的状态,人家都说程序员经常失眠什么的,但是这几个月来,我从没有失眠过,当然是过了分手那段时期.每天的工作很忙,一个任务接一个 ...
- tyvj P1716 - 上帝造题的七分钟 二维树状数组区间查询及修改 二维线段树
P1716 - 上帝造题的七分钟 From Riatre Normal (OI)总时限:50s 内存限制:128MB 代码长度限制:64KB 背景 Background 裸体就意味着 ...
- 基于Visual C++2013拆解世界五百强面试题--题7-链表的各种操作
请用C实现一个链表,实现链表的查找,逆置,替换,删除,添加,清空,创建. 查找.替换和删除.添加里面都会用到遍历链表的操作,所以重点在于遍历, 链表的逆置和清空考虑到效率,我们可以用递归实现, 至于创 ...
- 【20171026早】alert(1) to win - 第六、七、八题
早上7点起床,又写了一篇小说发在了起点网上,有兴趣的可以看看.点击这里 忙完后,继续练习,刚开始发现自己答题的速度有些慢,可能是因为对于html,javascript知识不是很精通,但是话又说回来,谁 ...
- ●线段树的三个题(poj 3225,hdu 1542,hdu 1828)
●poj 3225 Help with Intervals(线段树区间问题) ○赘述题目 给出以下集合操作: 然后有初始的一个空集S,和以下题目给出的操作指令,并输入指令: 要求进行指令操作后,按格式 ...
- AtCoder Grand Contest 11~17 做题小记
原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-11-to-20.html UPD(2018-11-16): ...
- AtCoder Grand Contest 1~10 做题小记
原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-1-to-10.html 考虑到博客内容较多,编辑不方便的情 ...
- 数列分块入门九题(二):LOJ6280~6282
Preface 个人感觉这中间的三题是最水的没有之一 数列分块入门 4--区间加法,区间求和 这个也是很多数据结构完爆的题目线段树入门题,但是练分块我们就要写吗 修改还是与之前类似,只不过我们要维护每 ...
- 2019寒假练题计划——LibreOJ刷题计划 &《信息学奥赛一本通》提高版题目
目录 2019.1.27 #10082. 「一本通 3.3 例 1」Word Rings 题意 思路 #10083. 「一本通 3.3 例 2」双调路径 题意 思路 #10084. 「一本通 3.3 ...
- 【noip模拟题】天神下凡(贪心)
vijos某次模拟赛原题... 处理出每个圆的一级祖先就行了... 其实没有那么麻烦,贪心即可出解. 我们将每个圆转换成线段后按左端点小右端点大的方法排序 然后维护一个栈: 对于每一个圆i 如果栈顶右 ...
随机推荐
- [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up IDEA2019的database插件无法链接mysql的解决办法(08001错误)
[08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up. 点击这里 ...
- TinyXPath 对于xpath标准的支持测试
xpath是一种基于xml的查询标准,一般的xml解析工具都具有,有的因为卓越的xpath性能而出名,其匹配查询算法牛逼而又高效,和正则有的一拼.虽然我现在大部分从事前端工作了,但是对于原理性的东西还 ...
- Ubuntu 使用scrapy-splash
配置docker 1.更新apt索引: $ sudo apt-get update 2.安装包允许apt通过HTTPS使用仓库: sudo dpkg --configure -a sudo apt ...
- 腾讯java面试经验 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.腾讯等公司offer,岗位是Java后端开发,因为发展原因最终选择去了腾讯,入职一年时间了,也成为了面试官,之 ...
- robotframework-SikuliLibrary 第三方库
Sikuli给GUI的自动化测试提供了一种新的方式,使用截图和图片,而不是用API.这种方法跟人工键盘鼠标的输入的测试更接近.Sikuli包括sikul脚本,基于Jython的API以及sikuli ...
- 一步一步学Spring Boot 2 微服务项目实战 - 黄文毅-2018年8月第一次印刷
properties 配置文件的优先级高于.yml .在properties文件中配置了server.port=8080 同时在.yml中配置了server.port=8090 Spring Boo ...
- 米尔科技MPSoC开发板评测
米尔科技推出的MYD-CZU3EG开发板搭载的就是UltraScale+ MPSoC平台器件 — XCZU3EG,它集成了四核Cortex-A53 处理器,双核 Cortex-R5 实时处理单元以及M ...
- Odoo中的模型详解
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826118.html [Odoo中,一切皆模型,连视图都是模型.Odoo将各种数据,如:权限数据.类 ...
- 折腾deepin修改终端语言
原创作品,作者是博客园sogeisetsu,转载请注明来源sogeisetsu.cnblogs.com 唉-都怪当初没学扎实,改个终端语言花费了半天. 首先,介绍一下我的情况 有两个用户,一个是roo ...
- pandas的pivot_table
参考文献: [1]pivot_table