备战蓝桥python——完全平方数

文章介绍了如何通过数论知识优化完全平方数的判断方法,避免暴力遍历,通过质因数分解和幂次奇偶性来确定一个数是否为完全平方数。给出了从搜索范围[1,int(n**0.5)]出发,检查质因数幂次的方法,并提供了相应的Python代码实现。

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

完全平方数

链接: 完全平方数
在这里插入图片描述

暴力解法:

n = int(input())
for i in range(1, n+1):
    if(((i*n)**0.5)%1==0.0):
        print(i)
        break

运用数论相关知识求解

任意一个正整数都可以被分解成若干个质数乘积的形式,例如 : 20 =   2 2 ∗ 5 1   20 = \ 2^{2}*5^{1}\, 20= 2251

由此,我们不难分析出,只要分解出的质因数的幂次项均为偶数,这个数就是完全平方数了

100 =   2 2 ∗ 5 2   100 = \ 2^{2}*5^{2}\, 100= 2252
这就是我们寻找x的方法

搜索范围的问题

我们确定搜索范围为[1, int(n**0.5)]
我们是如何推导出来的呢?

1)如果这个数本身就是完全平方数,也就是:
100 =   2 2 ∗ 5 2   100 = \ 2^{2}*5^{2}\, 100= 2252
对100开根号结果为10,包含了两个质因数,那么我们肯定可以搜索到它的质因数

2)如果这个数本身不是完全平方数,也就是:
20 =   2 2 ∗ 5 1   20 = \ 2^{2}*5^{1}\, 20= 2251
对20开根号,取整得到4,在二者中间,并且后者幂次项为奇数,最后直接乘上就好了

完整代码

def zhi(x):
    for i in range(2, int(x**0.5)+1):
        if(x%i==0):
            return False

    return True

n = int(input())
ans=1
for i in range(2, int(n**0.5)+1):
    if(n%i==0 and zhi(i)):
        k=0
        while n%i==0:
            n/=i
            k+=1
        if(k&1):
            ans*=i
if(n>1):
    ans*=n
print(int(ans))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值