相关疑难解决方法(0)

python中的整数平方根

在python或标准库中是否存在整数平方根?我希望它是准确的(即返回一个整数),并且如果没有解决方案则吠叫.

目前我推出了自己的天真的:

def isqrt(n):
    i = int(math.sqrt(n) + 0.5)
    if i**2 == n:
        return i
    raise ValueError('input was not a perfect square')
Run Code Online (Sandbox Code Playgroud)

但它很难看,我不相信大整数.如果我超过了这个值,我可以遍历正方形并放弃,但我认为做这样的事情会有点慢.另外我想我可能正在重新发明轮子,这样的东西肯定已经存在于python ......

python math integer sqrt

51
推荐指数
7
解决办法
5万
查看次数

什么是有效的算法来逐位找到一个非常大的整数平方根?

我需要编写程序来查找长度为数千位的数字的整数平方根.我不能使用Newton Raphson,因为我没有数据类型来存储和划分这么大的数字.我在C中使用长数组来存储数字.是否有任何算法可以通过迭代数字找到平方根?

编辑:

我不能像GMP一样使用外部库.

c algorithm square-root integer-arithmetic

7
推荐指数
1
解决办法
4437
查看次数

元整数平方根中的无限递归

美好的一天,

我的一个朋友正在询问将整数平方根函数转换为元函数.这是原始功能:

unsigned isqrt(unsigned value)
{
    unsigned sq = 1, dlt = 3;
    while(sq<=value)
    {
        sq  += dlt;
        dlt += 2;
    }
    return (dlt>>1) - 1;
}
Run Code Online (Sandbox Code Playgroud)

我使用了一个元版本constexpr,但他说他出于某种原因无法使用新功能:

constexpr std::size_t isqrt_impl
    (std::size_t sq, std::size_t dlt, std::size_t value){
    return sq <= value ?
        isqrt_impl(sq+dlt, dlt+2, value) : (dlt >> 1) - 1;
}

constexpr std::size_t isqrt(std::size_t value){
    return isqrt_impl(1, 3, value);
}
Run Code Online (Sandbox Code Playgroud)

所以我认为将其转换为以递归方式调用它的模板结构应该不难:

template <std::size_t value, std::size_t sq, std::size_t dlt>
struct isqrt_impl{
    static const std::size_t square_root = 
        sq <= …
Run Code Online (Sandbox Code Playgroud)

c++ recursion templates metaprogramming square-root

6
推荐指数
2
解决办法
726
查看次数