无法编写 squarefree 算法

Posted

技术标签:

【中文标题】无法编写 squarefree 算法【英文标题】:Unable to write a squarefree algorithm 【发布时间】:2017-01-29 10:44:24 【问题描述】:

我正在尝试编写一个返回 true 的函数,如果整数是 Square-Free - 这是我尝试过的:

def squarefree(n):
    for i in range (2,n-1):
        if n%(i**2)==0:
            return False
        else:
            return True

在数学中,无平方整数或 quadratfrei(来自德语)整数是不能被除 1 以外的任何完美平方整除的整数。例如,10 是无平方的,但 18 不是,因为 18 是能被 9 = 32 整除。最小的正平方数是

【问题讨论】:

Sooo 有什么问题吗?而且您的格式已关闭。 你有什么问题? 什么是免费的? 这段代码是写的吗 现在的代码检查n是否能被4整除。所以,问题是这个数字是否能被一个平方数整除? 【参考方案1】:

这里的主要问题是,只要你的 if 语句失败,你就会返回。将返回移出 for 循环。也可以快速节省时间,您只需要上到 n 的 4 次根。

import math

def squarefree(n):
    for i in range (2,math.ceil(math.sqrt(math.sqrt(n)))):
        if n%(i**2)==0:
            return False
    return True

您可以通过仅检查直到 n 的 4 次根的素数来进行更多优化。

【讨论】:

以上是关于无法编写 squarefree 算法的主要内容,如果未能解决你的问题,请参考以下文章

hdoj.3826 Squarefree number

在给定 4 个角位置的情况下,无法编写算法来填充平铺地图

bzoj 2986 Non-Squarefree Numbers 容斥原理+数学

Java 线程生产者消费者算法无法正常工作

DBSCAN 聚类算法无法正常工作。我究竟做错了啥?

Mandelbrot 的算法在不使用复数的情况下无法给出所需的结果