数论爱好者 发表于 2025-4-25 19:09:27

平方数立方数

定义一种特殊的三元组(a,b,c),满足以下条件:

1.a,b,c均为正整数,且a≤b≤c;

2.a^2+b^3是一个完全平方数(即存在整数k使得a^2+b^3=k^2);
3.a×b×c是一个完全立方数(即存在整数m使得a×b×c=m^3)。

问题:
给定一个上限N(例如N=10^18),求:

1.所有满足条件的三元组(a,b,c),其中c≤N;

2.满足条件的三元组数量随N增长的渐近表达式(需数学证明);

3.高效算法(时间复杂度低于Ο(N)),并分析其最优性。

示例:(28,8,98),举例可能不恰当,不严谨,意思意思而已
28^2+8^3=784+512=1296=36^2(满足条件1)
28*8*98=21952=28^3(满足条件2)
若限制a,b,c两两互质,解的数量如何变化?

数论爱好者 发表于 2025-4-25 21:26:59

3,3,24
3^2+3^3=6^2
3*3*24=6^3
a≤b≤c这个条件取消掉,a,b,c为正整数即可
a,b,c互质的找找看

数论爱好者 发表于 2025-4-26 00:00:44

               满足条件的三元组c≤100
   [, , , , ],解才有这几个,两两互质的一个也没有找到

数论爱好者 发表于 2025-4-26 00:31:02

数论爱好者 发表于 2025-4-26 00:00
满足条件的三元组c≤100
   [, , , , ...

FindAllTriples := proc(N)
    local b, factors, divisors, pairs, d1, d2, a, k, m, c, triples;
    triples := [];

    # 遍历所有可能的b值(修正范围:b ≤ N,而非N^(1/3))
    for b from 1 to N do
      # 生成b^3的所有因数
      factors := ifactors(b^3);
      divisors := generate_divisors(factors);
      pairs := generate_ordered_pairs(divisors, b^3);# 传入b^3的值用于验证
      
      # 处理每个因数对 (d1, d2)
      for pair in pairs do
            d1 := pair;
            d2 := pair;
            # 检查d1和d2的奇偶性相同
            if type(d1 + d2, even) then
                # 计算a和k
                a := (d2 - d1) / 2;
                k := (d2 + d1) / 2;
                # 检查a是否为整数且大于0
                if a > 0 and type(a, integer) then
                  # 计算满足条件2的c值
                  min_m := ceil((a*b)^(1/3));
                  for m from min_m do
                        c := m^3 / (a*b);
                        if c > N then break end if;
                        if c::posint then
                            triples := ];
                        end if;
                  end do;
                end if;
            end if;
      end do;
    end do;

    return triples;
end proc:

# 辅助函数1:生成所有因数
generate_divisors := proc(factors)
    local divisors, p, e, temp, i, j;
    divisors := ;
    for f in factors do
      p := op(1, f);
      e := op(2, f);
      temp := [];
      for d in divisors do
            for j from 0 to e do
                temp := ;
            end do;
      end do;
      divisors := temp;
    end do;
    return divisors;
end proc:

# 辅助函数2:生成有序因数对,并验证d1*d2 = target
generate_ordered_pairs := proc(divisors, target)
    local pairs, i, j, d1, d2;
    pairs := [];
    for i from 1 to nops(divisors) do
      for j from i to nops(divisors) do
            d1 := divisors;
            d2 := divisors;
            if d1 * d2 = target then
                pairs := ];
            end if;
      end do;
    end do;
    return pairs;
end proc:

# 示例验证(N=100)
result := FindAllTriples(100);
print("所有符合条件的三元组:");
print(result);
运行结果:
[, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ]

northwolves 发表于 2025-4-26 07:41:30

可以穷举abc整体互质的解:
f:=Values@Solve==1&&Max<=e,{a,b,c,n,m},PositiveIntegers];v=f;{Length@v,v[]}

{13,{{1,2,4},{1,2,32},{1,2,108},{6,4,9},{8,8,1},{8,8,27},{8,8,125},{25,6,180},{120,9,25},{120,9,200},{162,36,1},{162,36,125},{200,24,45}}}
页: [1]
查看完整版本: 平方数立方数