SQRT分解

SQRT分解

Leetcode303

import java.util.Arrays;

public class NumArray {
    private int[] data, blocks;
    private int N;//元素总数
    private int B;//每组元素个数
    private int Bn;//组数
    public NumArray(int[] nums) {
        N = nums.length;
        if (N == 0) {
            return;
        }
        B = (int) Math.sqrt(N);
        Bn = N / B + (N % B > 0 ? 1 : 0);
        data = Arrays.copyOf(nums, N);
        blocks = new int[Bn];
        for (int i = 0; i < N; i++) {
            blocks[i / B] += nums[i];
        }
    }

    public int sumRange(int x, int y) {
        if (x < 0 || x >= N || y < 0 || y >= N || x > y) {
            return 0;
        }
        int bstart = x / B, bend = y / B;
        int res = 0;
        if (bstart == bend) {
            for (int i = x; i <= y; i++) {
                res += data[i];
            }
            return res;
        }
        for (int i = x; i < (bstart + 1) * B; i++) {
            res += data[i];
        }
        for (int b = bstart + 1; b < bend; b++) {
            res += blocks[b];
        }
        for (int i = bend * B; i <= y; i++) {
            res += data[i];
        }
        return res;
    }
}

Docker

学习了dockers,并且完成了安装并且对docker进行了简单的应用。

<think> 我们被要求介绍Python中math.isqrt()函数的使用方法和功能。根据提供的引用内容,我们可以总结如下: 1. **功能描述**:math.isqrt(n) 用于计算非负整数 n 的整数平方根(即向下取整的平方根)。它返回最大的整数 a,使得 a² ≤ n。 2. **注意事项**:该方法要求 n 为非负整数(即 n >= 0),否则会引发 ValueError。此外,该函数是Python 3.8版本新增的。 3. **与math.sqrt()的区别**:math.sqrt()返回的是浮点数形式的平方根,而math.isqrt()返回的是整数形式的平方根(向下取整)。 根据引用中的示例代码,我们可以展示其基本用法。 下面按照要求进行回答: - 使用中文回答。 - 行内数学表达式使用$...$格式,例如:$a^2 \leq n$。 - 独立公式使用$$...$$格式(但此处没有复杂的独立公式需要展示,所以主要用行内)。 - 在回答末尾生成相关问题。 - 引用的内容在末尾添加引用标识。 注意:引用内容已经给出三个引用[^1][^2][^3],我们在回答中引用它们。 回答结构: 1. 介绍函数的功能。 2. 说明参数和返回值。 3. 注意事项(版本、参数要求)。 4. 与math.sqrt()的对比。 5. 示例代码。 6. 相关问题。 </think>### Python `math.isqrt()` 函数详解 `math.isqrt()` 是 Python 数学模块中用于计算**整数平方根**的高效方法,其核心功能和特性如下: --- #### 1. **功能定义** - 输入非负整数 $n$,返回满足 $a^2 \leq n$ 的最大整数 $a$(即平方根的向下取整值) - 数学表达:$$\text{math.isqrt}(n) = \lfloor \sqrt{n} \rfloor$$ #### 2. **参数要求** ```python import math math.isqrt(n) # n 必须是非负整数 (n ≥ 0) ``` - ❗ 若输入负数将触发 `ValueError` - ❗ 浮点数需先转换为整数:`math.isqrt(int(10.9))` #### 3. **与 `math.sqrt()` 的对比** | 特性 | `math.isqrt(n)` | `math.sqrt(n)` | |--------------|----------------------------------|------------------------------| | **返回值类型** | 整数 (`int`) | 浮点数 (`float`) | | **计算方式** | 直接整数运算(无浮点误差) | 浮点运算(可能有精度误差) | | **结果示例** | `math.isqrt(10) = 3` | `math.sqrt(10) ≈ 3.162...` | #### 4. **使用示例** ```python import math # 基础用法 print(math.isqrt(16)) # 输出: 4 (因为 4²=16 ≤ 16) print(math.isqrt(20)) # 输出: 4 (因为 4²=16 ≤ 20, 5²=25>20) # 实际应用:判断完全平方数 def is_perfect_square(n): return n == math.isqrt(n) ** 2 print(is_perfect_square(25)) # True print(is_perfect_square(30)) # False ``` #### 5. **注意事项** - 🚫 仅适用于 Python 3.8 及以上版本 - 🚫 输入必须是整数,若需处理浮点数请先取整:`math.isqrt(int(x))` - ✅ 运算效率显著高于 `int(math.sqrt(x))`(避免浮点转换开销) --- ### 典型应用场景 1. **数论计算** 质数筛法、佩尔方程求解中需要精确的整数平方根 2. **离散数学** 格点问题、勾股数生成等整数运算场景 3. **密码学** 大整数分解相关算法(如费马分解法) 4. **性能优化** 替代 `int(math.sqrt())` 提升计算速度[^1][^3] ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值