@hishlishter

Найти наименьшее натуральное число n, представимое двумя различными способами в виде суммы кубов двух натуральных чисел х3 + у3 (х >= у)?

Найти наименьшее натуральное число n, представимое двумя различными
способами в виде суммы кубов двух натуральных чисел х3 + у3 (х >= у)
код на паскале:
const
  eps = 0.00001;

var
  x, y, n, x1, y1: longint;
  tmp: real;

begin
  x := 0;
  while true do
  begin
    inc(x);
    y := 0;
    while (y < x) do
    begin
      inc(y);
      n := x * x * x + y * y * y;
      x1 := x;
      y1 := y;
      while x1 > 1 do
      begin
        dec(x1);
        tmp := exp(ln(n - x1 * x1 * x1) / 3);
        if trunc(tmp) > x1 then
          break;
        if (Frac(tmp) < eps) or (1 - Frac(tmp) < eps) then
        begin
          y1 := round(tmp);
          writeln(x, ' ', y, ' ', x1, ' ', y1);
          readln;
        end;
      end;
    end;
  end;
end.


Но я не уверен в правильности, а так же нужно написать на c++, с чем у меня и возникли проблемы(
  • Вопрос задан
  • 157 просмотров
Решения вопроса 1
@terryderry
Вот простенькое решение простым перебором. Уверен, что есть более красивое математическое решение.
#include <iostream>

using namespace std;

//Функция, которая ищет число способов, с помощью которых число представляется в вие суммы кубов
int count(int num)
{
    int result = 0;
    for (int y = 1; y * y * y <= num; y++)
    {
        for (int x = y + 1; x * x * x <= (num - y * y * y); x++)
        {
            if (x * x * x + y * y * y == num)
            {
                result++;
            }
        }
    }
    return result;
}
int main()
{
    int num = 1;
    while (count(num) < 2)
    {
        num++;
    }
    std::cout << num << std::endl;
    return 0;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы