3491 完全平方数(试除法分解质因数)

1. 问题描述:

一个整数 a 是一个完全平方数,是指它是某一个整数的平方,即存在一个整数 b,使得 a = b ^ 2。给定一个正整数 n,请找到最小的正整数 x,使得它们的乘积是一个完全平方数。

输入格式

输入一行包含一个正整数 n。

输出格式

输出找到的最小的正整数 x。

数据范围

对于 30% 的评测用例,1 ≤ n ≤ 1000,答案不超过 1000。
对于 60% 的评测用例,1 ≤ n ≤ 10 ^ 8,答案不超过 10 ^ 8。
对于所有评测用例,1 ≤ n ≤ 10 ^ 12,答案不超过 10 ^ 12。

输入样例1:

12

输出样例1:

3

输入样例2:

15

输出样例2:

15
来源:https://www.acwing.com/problem/content/3494/

2. 思路分析:

我们知道一个数的完全平方数等价于它的所有质因子的次数为偶数,所以我们可以求解出n的所有质因子如果次数是偶数则说明可以分解,如果次数是奇数则说明至少需要乘以当前的一个质因子才可以将当前的质因子的次数变为偶数所以次数为奇数的质因子的乘积就是答案。

3. 代码如下:

class Solution:
    # 试除法分解质因数
    def process(self):
        x = int(input())
        i = 2
        res = 1
        while i * i <= x:
            s = 0
            if x % i == 0:
                while x % i == 0:
                    x //= i
                    s += 1
                if s % 2:
                    res *= i
            i += 1
        if x > 1:
            res *= x
        return res


if __name__ == "__main__":
    print(Solution().process())
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值