专栏文章

AtCoder题解

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipuxfee
此快照首次捕获于
2025/12/03 18:21
3 个月前
此快照最后确认于
2025/12/03 18:21
3 个月前
查看原文

ABC397

D-Cubes

思路: 我们要找到 x3y3=nx^3-y^3=n ,我们发现 (xy)(3(x+y)2+(xy)2))=4(x3y3)=4n(x-y)(3(x+y)^2+(x-y)^2))=4(x^3-y^3)=4n ,所以我们令 x+y=a,xy=bx+y=a,x-y=bb3(3a2+b2)b^3(3a^2+b^2)
我们遍历 b , b<=106b<=10^6 ,因为 b3<=1018b^3<=10^{18} ,求出 a ,再求 x=(a+b)/2,y=(ab)/2x=(a+b)/2,y=(a-b)/2 ,如果没问题就可以输出了
代码:
CPP
#include <bits/stdc++.h>
using namespace std;
long long n,a,b;
long long P_cube(long long x)
{
	long long p_cube=sqrt(x);
	if(p_cube*p_cube!=x) return -1;
	return p_cube;
}
int main()
{
	cin>>n;
	n=4*n;
	for(b=1;b*b*b<=n;b++)
	{
		if(n%b>0) continue;
		a=n/b-b*b;
		if(a%3!=0) continue;
		a/=3;
		a=P_cube(a);
		if(a==-1) continue;
		if(a%2!=b%2) continue;
		long long x=(a+b)/2,y=(a-b)/2;
		if(x<1||y<1) continue;
		cout<<x<<' '<<y<<'\n';
		return 0;
	}
	cout<<-1;
    return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...