
2026-07-21:可由多种立和构造的整数。用go谈话漳州罐体保温,给定个正整数上限 n,个正整数 x 被称为“好整数”,当且仅当它不错默示为两组不同的正整数对 (a, b) 的立和,其中 a 和 b 齐是正整数且欢乐 a ≤ b。换句话说,存在至少两种不同的 (a, b) 组合,使得 x = a³ + b³。当今需要找出整个不外 n 的好整数,并将它们按从小到大的规则以列表情势复返。
1
输入: n = 4104。
输出: [1729,4104]。
阐明注解:
在小于便是 4104 的整数中,好整数包括:
1729:1³ + 12³ = 1729,以及 9³ + 10³ = 1729。
4104:2³ + 16³ = 4104,以及 9³+ 15³ = 4104。
因此,谜底是 [1729, 4104]。
题目来独力扣3890。
大体武艺如下:
、瞻望算阶段(init函数)
1. 笃定摆设界限
• 上限 mx = 1_000_000_000。
• 关于 a,从1起初摆设,直到a³ > mx/2适度。
为什么是mx/2?因为咱们要找a³ + b³ ≤ mx且a ≤ b,当a³自己就过mx/2时,即使小的b = a,和也会过mx,是以需继续摆设。
2. 双层轮回摆设整个 (a, b)组合
• 外层轮回摆设 a,内层轮回摆设 b(从 a 起初,保证 a ≤ b)。
• 内层轮回圮绝条目是 a³ + b³ > mx,旦过就 break 内层轮回。
• 对每对 (a, b),谋略 x = a³ + b³,并在个哈希表 cnt 中统计该值出现的次数。
3. 筛选好整数
• 遍历哈希表 cnt,关于出现次数 c > 1 的 x,阐明它至少不错由两组不同的 (a, b) 默示,因此将其加入 goodIntegers 列表。
• 这里莫得存储具体组合,只温存出现次数是否大于 1。
4. 排序
• 用 slices.Sort 将 goodIntegers 从小到大排序,以便后续二分查找。
备注: 题目描画提到“两组不同的正整数对”,代码中当 c > 1 即判定为好整数。这是正确的,因为摆设时保证了 a ≤ b,是以同个 x 如果有多个计数,势必对应不同的 (a, b) 组合(组合序但已通过 a ≤ b 模范默示)。
二、查询阶段(findGoodIntegers函数)
1. 二分查找
• 调用 sort.SearchInts(goodIntegers, n+1),在已排序的 goodIntegers 中查找个 大于 n 的元素的下标 i。
• 由于 goodIntegers 是升序的,整个下标
2. 复返后果
• 复返切片 goodIntegers[:i],铁皮保温即整个不外 n 的好整数,还是是有序的。
三、主函数中的示例
四、复杂度分析
1. 瞻望算的技巧复杂度
• 外层轮回 a 的界限:a³ ≤ 5e8(即 mx/2),是以 a 简易 ∛(5e8) ≈ 793。
• 内层轮回 b 的界限:关于每个 a,b 从 a 起初,直到 b³ ≤ mx - a³。
总摆设的 (a, b) 对的数目简易是整个欢乐 a ≤ b 且 a³ + b³ ≤ 1e9 的组合数。
• 这是个二维区域内的整点数,量不错通过积分揣度:
• 条目 a³ + b³ ≤ 1e9,且 1 ≤ a ≤ b。
• 平直摆设点对数目约为 O(N^(2/3)),这里 N = 1e9,是以 N^(2/3) = (1e9)^(2/3) = 1e6 别。
• 骨子上这么的整数对数目简易是 几十万到百万摆布。每次谋略 a³ + b³ 和哈希表操动作 O(1),是以瞻望算的总技巧在可给与界限内,记为 O(M),其中 M 是欢乐条目的 (a, b) 对的数目(约 10^5 ~ 10^6)。
2. 瞻望算的空间复杂度
• 哈希表 cnt 存储整个可能的 a³ + b³ 值,不同值的数目小于便是 M,亦然 O(M)。
• goodIntegers 存储出现次数 >1 的值,数目远小于 M(题目提到共 1554 个),可视为 O(G),G 是好整数数目。
• 全体特别空间复杂度为 O(M)。
3. 单次查询的技巧复杂度
• 只消次二分查找:sort.SearchInts 技巧复杂度 O(log G),G ≈ 1554,险些常数技巧。
• 空间复杂度:复返切片可平直援用全局数组的部分,莫得特别分派,O(1) 特别空间。
转头:
• 总技巧复杂度:瞻望算 O(M)(约 10^5 ~ 10^6 别),单次查询 O(log G)(险些常数)。
• 总和外空间复杂度:O(M),主如果哈希表存储整个不同立和的计数。
Go齐全代码如下:
.
package main
import (
"fmt"
"slices"
"sort"漳州罐体保温
)
var goodIntegers []int// 1554 个
func init {
const mx = 1_000_000_000
cnt := map[int]int{}
for a := 1; a*a*a
for b := a; a*a*a+b*b*b
cnt[a*a*a+b*b*b]++
}
}
for x, c := range cnt {
if c > 1 {
goodIntegers = append(goodIntegers, x)
}
}
slices.Sort(goodIntegers)
}
func findGoodIntegers(n int) []int {
i := sort.SearchInts(goodIntegers, n+1)
return goodIntegers[:i]
}
func main {
n := 4104
result := findGoodIntegers(n)
fmt.Println(result)
}
Python齐全代码如下:
.
# -*-coding:utf-8-*-
def init_good_integers:
"""运转机好整数列表,这些数不错用至少两种式默示为两个立数之和"""
mx = 1_000_000_000
cnt = {}
a = 1
while a * a * a
b = a
while a * a * a + b * b * b
val = a * a * a + b * b * b
cnt[val] = cnt.get(val, 0) + 1
b += 1
a += 1
good_integers = []
for x, c in cnt.items:
if c > 1:
good_integers.append(x)
good_integers.sort
return good_integers
def find_good_integers(n, good_integers):
"""复返整个不大于 n 的好整数"""
result = []
for x in good_integers:
if x
result.append(x)
else:
break
return result
def main:
good_integers = init_good_integers
n = 4104
result = find_good_integers(n, good_integers)
print(result)
if __name__ == "__main__":
main
C++齐全代码如下:
.
#include
#include
#include
#include
using namespace std;
vector goodIntegers;
// 全局运转机器
namespace {
struct InitGoodIntegers {
InitGoodIntegers {
const int mx = 1'000'000'000;
unordered_map cnt;
for (int a = 1; a * a * a
for (int b = a; a * a * a + b * b * b
int val = a * a * a + b * b * b;
cnt[val]++;
}
}
for (const auto& [x, c] : cnt) {
if (c > 1) {
goodIntegers.push_back(x);
}
}
sort(goodIntegers.begin, goodIntegers.end);
}
} initGoodIntegers;
}
vector findGoodIntegers(int n) {
auto it = upper_bound(goodIntegers.begin, goodIntegers.end, n);
int idx = distance(goodIntegers.begin, it);
return vector(goodIntegers.begin, goodIntegers.begin + idx);
}
int main {
int n = 4104;
vector result = findGoodIntegers(n);
cout
for (size_t i = 0; i
cout
if (i
cout
}
}
cout
return 0;
}
·
咱们深信东说念主工智能为频频东说念主提供了种“增强用具”,并死力于于共享全位的AI学问。在这里,您不错找到新的AI科普著述、用具评测、进步率的阴私以及行业瞻念察。
接待关注“福大大架构师逐日题”,发讯息可获取口试贵府,让AI助力您的异日发展。邮箱:215114768@qq.com相关词条:玻璃棉毡 塑料挤出机 预应力钢绞线 铁皮保温 万能胶生产厂家
1.本网站以及本平台支持关于《新广告法》实施的“极限词“用语属“违词”的规定,并在网站的各个栏目、产品主图、详情页等描述中规避“违禁词”。
2.本店欢迎所有用户指出有“违禁词”“广告法”出现的地方,并积极配合修改。
3.凡用户访问本网页,均表示默认详情页的描述,不支持任何以极限化“违禁词”“广告法”为借口理由投诉违反《新广告法》,以此来变相勒索商家索要赔偿的违法恶意行为。
