欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > Atcoder ABC397-D 题解

Atcoder ABC397-D 题解

2025/3/16 13:57:41 来源:https://blog.csdn.net/m0_60355267/article/details/146286383  浏览:    关键词:Atcoder ABC397-D 题解

https://atcoder.jp/contests/abc397/tasks/abc397_dhttps://atcoder.jp/contests/abc397/tasks/abc397_d

题目描述:

确定是否存在一对正整数(x,y),使得x^3-y^3=N


思路:

首先对方程进行转化

k=x-y

\because N=x^3-y^3=x^3-(x-k)^3=x^3-(x^3-3x^2k+3xk^2-k^3)

\therefore N=x^3-y^3=3x^2k-3xk^2+k^3

3x^2k-3xk^2+k^3-N=0

接下来确定k的范围

根据立方差公式

N=x^3-y^3=(x-y)(x^2+xy+y^2)=k(x^2+xy+y^2)

\because x>0,y>0     \therefore xy>0

\therefore k(x^2+xy+y^2)\geq k(x^2-2xy+y^2)=k\cdot k^2=k^3

\therefore N\geq k^3    \therefore k\leq \sqrt[3]{N}

\because N\leq 10^{18}

\therefore k\leq \sqrt[3]{n}\leq 10^{6}

因此,我们可以从1\sqrt[3]{N}来逐个枚举k

此时 方程的k就变成了常数

a=3k , b=-3k^2 , c=k^3-N

原方程变为ax^2+bx+c=0

这时,只需要解一下这个二次方程就可以了

x=\frac{-b\pm \sqrt {b^2-4ac}}{2a}

提醒:

\because b=-3k^2\geq -10^{12}

\therefore b^2\leq10 ^{24}   会爆long long

所以要开__int128


代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
signed main(){cin>>n;for(int i=1;i*i*i<=n;i++){int a=3*i,b=-3*i*i,c=i*i*i-n;__int128 u=b,v=a;u=u*u-4*v*c;__int128 k=sqrtl(u);if(k*k==u){int xa=(-b+k),xb=(-b-k);if(xa>0&&xa%(2*a)==0&&xa/2/a-i>0){xa/=(2*a);cout<<xa<<" "<<xa-i;return 0;}if(xb>0&&xb%(2*a)==0&&(xb/2/a)-i>0){xb/=(2*a);cout<<xb<<" "<<xb-i;return 0;}}}cout<<"-1";return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词