программирование Mathematica, чтобы найти конкретный набор идеальных квадратных чисел - PullRequest
0 голосов
/ 02 декабря 2018

Мой коллега задал следующий вопрос своему классу программирования C, который мне показался очень интересным.Это легко сделать на любом языке программирования, и я сразу же подумал, что это Вольфрам.Вопрос в следующем:

Число 25 является уникальным совершенным квадратом. Если мы увеличиваем каждую цифру на единицу, оно становится 36, что также является идеальным квадратом!написать программу, чтобы найти другой набор чисел с такими же качествами.

Я уверен, что это легко сделать в Mathematica.Может кто-нибудь объяснить, как я могу сделать это в Mathematica.пожалуйста, обратите внимание, что причина вопроса - просто повод, чтобы заставить меня заняться программированием на mathematica, о котором я ничего не знаю.

спасибо всем.

Ответы [ 4 ]

0 голосов
/ 03 декабря 2018

Вы можете легко расширить это на любую базу, и вам нужно только знать, как долго число в данной базе.Я имею в виду следующее.Предположим в базе 10 число 25. Чтобы проверить предпосылку, нам нужно добавить 11. Но 11 - это не более чем:

25 + 11
= 25 + 10^1 + 10^0
= 25 + (10^2-1)/(10-1)
= 36 = 6^2

представьте теперь число 72 × 72 = 5184 , но представлено в базе 3 ( 5184 10 = 21010000 3 ).Делая теперь вычисления в базе 3, вы получите

21010000 + 11111111
= 21010000 + 3^7 + 3^6 + 3^5 + 3^4 + 3^3 + 3^2 + 3^1 + 3^0
= 21010000 + (3^8-1)/(3-1)
= 102121111 = 10102^2

, где 102121111 3 = 8464 10 = 92 10 ×92 10 .

Как вы заметили, все, что вам нужно сделать, это добавить число (b n - 1) / (b-1) на число и проверьте, если это квадрат.Здесь n представляет общее количество цифр числа x в базе b .

С помощью простой таблицы поиска вы делаете это вMathematica as:

b = 10 
x = Table[n^2, {n, 1, 1000}];
Select[x, MemberQ[x, # + (b^IntegerLength[#, b] - 1)/(b - 1)] &];
{25, 289, 2025, 13225, 100489, 198025, 319225, 466489}

, а полный список от базы 2 до базы 10:

Table[Select[x, MemberQ[x, # + (b^IntegerLength[#, b] - 1)/(b - 1)] &], {b, 2, 10}]
0 голосов
/ 02 декабря 2018

Более функциональное решение.

Table[x^2, {x, 1, 100}] // Select[IntegerQ[Sqrt[FromDigits[IntegerDigits[#] + 1]]] &]

Как следует обрабатывать цифру 9?

IntegerDigits[19]
(* {1, 9} *)

IntegerDigits[19] + 1
(* {2, 10} *)

FromDigits[IntegerDigits[19] + 1]
(* 30 *)

Если переносить +1, чтобы результирующее число было 20, а не 30?

0 голосов
/ 02 декабря 2018
find[from_, to_] := Module[{a, b, c, d, e},
  a = Range[from, to];
  b = a^2;
  c = IntegerDigits[b];
  (*Add 1's to the digits of the square,
  except where the square contains a 9*)
  d = MapThread[
    If[MemberQ[#2, 9], Null,
      #1 + FromDigits[ConstantArray[1, Length[#2]]]] &,
    {b, c}];
  (*Find the positions where the square roots are integers*)
  e = Position[Sqrt[d], _?IntegerQ, {1}];
  Extract[a, e]]

find[1, 1000000]

{5, 45, 115, 2205, 245795, 455645}

Например

Sqrt[45^2 + 1111]

56

и

Sqrt[455645^2 + 111111111111]

564556

0 голосов
/ 02 декабря 2018

Вместо того, чтобы бросить вас в океан, давайте сначала поможем вам бродить по мелкому концу бассейна.

n=1;
While[n<100,
  d=IntegerDigits[n];(*get the list of digits making up n*)
  newd=d+1;(*add one to every element of the list giving a new list*)
  newn=FromDigits[newd];(*turn that new list of digits back into a number*)
  If[IntegerQ[Sqrt[newn]],Print[{n,newn}]];
  n++
]

Это не только смотрит на квадратные значения n, но может датьВам нужна подсказка о том, как увеличивать цифры и проверять квадратный результат.

В Mathematica всегда есть как минимум дюжина различных способов сделать что-либо, и некоторые из них связаны с тем, чтобы программы были короткими,и потенциально загадочный, насколько это возможно.Вы можете начать поднимать это позже.Простота кажется лучше, когда вы начинаете работать с новым языком.

Надеюсь, вам понравится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...