解方程

博客内容探讨如何找到正整数n满足方程sqrt(n)=sqrt(x)-sqrt(y)的情况下,x的最小正整数值。通过分解质因数和枚举质数p的方法来求解,算法复杂度关键在于质因数分解和找到最小的y,使得n×y为完全平方数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给出一个正整数n(1<=n<=231-1),求当x,y都为正整数,方程sqrt(n)=sqrt(x)-sqrt(y);的解中,x的最小值是多少?
输入格式
一行,一个整数。
输出格式
一行,一个满足条件的最小的x的解。
输入样例
4
输出样例
9
算法分析1:任何一个正整数n一定能表示成n=p1a1×p2a2 × ……× pkak的形式,其中pi是质数且pi<pj,ai是大于0的正整数。
因此将给定的n通过分解质因子得到的上面的形式,要保证n×y是完全平凡数且n×y最小,就必须把n的质因子的奇次幂加1使其换成偶次幂,也就是解出一个最小的y,使n×y成为完全平方数,通过上述分析y=(p1a1%2)×(p2a2%2)×……×(pkak%2),这就是可以使y最小。
算法的时间复杂度主要取决对n的质因数分解的代价,预处理sqrt(231)以内的质数,这样便于对n的质因数分解。
进一步思考算法2:例如当n=288,把n质因子分解后得288=25×32=24×32×2,在乘上最小的y即2得到24×32×22,就是一个完全平方数,按照这个思路,要把n写成两部分相乘式,一部分是已经完全平方数形式用p2表示,另一部分用q表示,即n=p2×q,y=q;得
x=n+y+2×sqrt(n×y)=(p+1)×(p+1)×q;只需要y最小的q。即枚举p,根据n=p2×q,求出最小的q和对应的p从而求出x即可。

#include<iostream>
#include<math.h>
using namespace std;

long long n,t
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值