Для некоторого положительного целого числа , не являющегося квадратом, найдите фундаментальное решение связанного уравнения Пелла.
Детали
- Фундамент представляет собой пару целых чисел удовлетворяющих уравнению, где является минимальным и положительным. (Всегда существует тривиальное решение которое не учитывается.)
- Вы можете предположить, что не квадрат.
Примеры
n x y
1 - -
2 3 2
3 2 1
4 - -
5 9 4
6 5 2
7 8 3
8 3 1
9 - -
10 19 6
11 10 3
12 7 2
13 649 180
14 15 4
15 4 1
16 - -
17 33 8
18 17 4
19 170 39
20 9 2
21 55 12
22 197 42
23 24 5
24 5 1
25 - -
26 51 10
27 26 5
28 127 24
29 9801 1820
30 11 2
31 1520 273
32 17 3
33 23 4
34 35 6
35 6 1
36 - -
37 73 12
38 37 6
39 25 4
40 19 3
41 2049 320
42 13 2
43 3482 531
44 199 30
45 161 24
46 24335 3588
47 48 7
48 7 1
49 - -
50 99 14
51 50 7
52 649 90
53 66249 9100
54 485 66
55 89 12
56 15 2
57 151 20
58 19603 2574
59 530 69
60 31 4
61 1766319049 226153980
62 63 8
63 8 1
64 - -
65 129 16
66 65 8
67 48842 5967
68 33 4
69 7775 936
70 251 30
71 3480 413
72 17 2
73 2281249 267000
74 3699 430
75 26 3
76 57799 6630
77 351 40
78 53 6
79 80 9
80 9 1
81 - -
82 163 18
83 82 9
84 55 6
85 285769 30996
86 10405 1122
87 28 3
88 197 21
89 500001 53000
90 19 2
91 1574 165
92 1151 120
93 12151 1260
94 2143295 221064
95 39 4
96 49 5
97 62809633 6377352
98 99 10
99 10 1
Соответствующие последовательности OEIS: A002350 A002349 A033313 A033317
n
s. (кстати, я тоже был удивлен, но у меня был этот вызов в песочнице около года)Ответы:
Пит , 612 кодов
Принимает п из стандартного ввода. Выходы у, затем х , разделенные пробелом.
Кодел размер 1:
Кодел размер 4, для удобства просмотра:
объяснение
Проверьте эту трассировку NPiet , которая показывает программу, вычисляющую решение для входного значения 99.
Я не уверен, слышал ли я когда-нибудь об уравнении Пелла до этого испытания, поэтому я получил все следующее из Википедии; в частности, эти разделы из трех статей:
В основном то, что мы делаем, это:
Я, честно говоря, понятия не имею, будет ли подход грубой силы короче, и я не собираюсь пробовать это!Хорошо, я попробовал.источник
Пит , 184 кодекса
Это альтернатива грубой силы, которую я сказал (в моем другом ответе ), что я не хотел писать. Требуется более 2 минут, чтобы вычислить решение для n = 13. Я действительно не хочу пробовать его на n = 29 ... но оно проверяется для каждого n до 20, поэтому я уверен, что это правильно.
Как и этот другой ответ, он берет n из стандартного ввода и выводит y, затем x , через пробел.
Кодел размер 1:
Кодел размер 4, для удобства просмотра:
объяснение
Вот трассировка NPiet для входного значения 5.
Это самая грубая грубая сила, повторяющаяся как поИкс и по Y . Другие решения могут повторяться по Икс а затем вычислять Y= х2- 1N----√ , но онислабаков.
Начиная сх = 2 и Y= 1 , это проверяет, решили ли Икс и Y уравнение. Если он имеет (вилка внизу справа), он выводит значения и выходит.
Если нет, то он продолжается влево, гдеY увеличивается и сравнивается с Икс . (Тогда есть некоторый поворот направления, чтобы следовать зигзагообразному пути.)
Это последнее сравнение, где путь разделяется вокруг середины слева. Если они равны,Икс увеличивается, а Y возвращается к 1. И мы возвращаемся к проверке, является ли это решением.
У меня все еще есть свободные пробелы, поэтому, возможно, я посмотрю, смогу ли я включить это вычисление квадратного корня без расширения программы.
источник
Брахилог , 16 байт
Попробуйте онлайн!
объяснение
источник
Par / GP , 34 байта
PARI / GP почти имеет встроенный для этого:Q ( D--√) , гдеD -дискриминантполя. Другими словами,Икс2- п ⋅ у2= ± 1 . Поэтому я должен взять квадрат, когда его норма- 1 .
quadunit
дает основную единицу из квадратичного поляquadunit(4*n)
решает уравнение ПелляЯ не знаю, какой алгоритм он использует, но он даже работает, когдаN не является квадратом.
Ответы даются в формеN--√ .
x + y*w
, гдеw
обозначаетПопробуйте онлайн!
источник
Wolfram Language (Mathematica) , 46 байтов
Попробуйте онлайн!
источник
05AB1E ,
171614 байтовСпас Байт благодаря Кевину Круйссену .
Выходы
[y, x]
Попробуйте онлайн!
объяснение
источник
Ų
глючило с десятичными знаками ...>. <В любом случае, вы можете удалить оба,
и добавить трейлинг‚
(нет, запятые не являются то же самое; p) сохранить байт.Ų
впервые заметил, что это не сработало, как ожидалось.Java 8,
747372 байта-1 байт благодаря @Arnauld .
-1 байт благодаря @ OlivierGrégoire .
Попробуйте онлайн.
Объяснение:
источник
n
на adouble
иx
aint
, играя на факте,x*x-1
равном(-x-1)*(-x+1)
.(x+1)*(x+1)-1
равно-x*-(x+2)
, чтобы быть полностью правильным.R,
66565453524745 байтполная программа
-1 -2благодаря @Giuseppe-7 благодаря @Giuseppe & @Robin Ryder -2 @JAD
источник
.5
вместо0.5
x
эквивалентен нахождению наименьшего значенияy
. Это позволяет сэкономить 2 байта, потому что выражениеx
в терминахy
короче, чем наоборот, и 4 байта с помощью хитрости использования,T
которая инициализируется в 1.+T
в конце, чтобы убедиться, что когдаy==1
он вернется1
вместо,TRUE
но я не совсем уверен.Желе , 40 байт
Попробуйте онлайн!
Альтернативный ответ желе, менее гольфы, но более эффективный алгоритмически, когда х и у большие. Это находит сходящиеся регулярные непрерывные дроби, которые аппроксимируют квадратный корень из n, а затем проверяет, которые решают уравнение Пелла. Теперь правильно находит период регулярной непрерывной дроби.
Благодаря @TimPederick я также реализовал целочисленное решение, которое должно обрабатывать любое число:
Желе , 68 байт
Попробуйте онлайн!
Например, решение для 1234567890 имеет 1936 и 1932 цифры для числителя и знаменателя соответственно.
источник
JavaScript (ES7), 47 байт
Попробуйте онлайн!
Попробуйте онлайн!
Или мы можем пойти нерекурсивным путем за 50 байтов :
Попробуйте онлайн!
источник
TI-BASIC,
444241 байтПримеры:
Объяснение:
Примечание: TI-BASIC - это токенизированный язык. Количество символов не равно количеству байтов.
источник
MATL , 17 байт
Попробуйте онлайн!
объяснение
Код продолжает увеличивать счетчик k = 1, 2, 3, ... Для каждого k ищутся решения x , y с 1 ≤ x ≤ k , 1 ≤ y ≤ k . Процесс, когда какое-то решение, если найдено.
Эта процедура гарантированно найдет только одно решение, которое является фундаментальным. Чтобы понять почему, обратите внимание, что
Как следствие 1 и 2,
источник
Python 2 , 49 байт
Попробуйте онлайн!
Находит
x
как наименьшее число выше 1 гдеx % sqrt(n) <= 1/x
. Затем находитy
изx
какy = floor(x / sqrt(n))
.источник
Haskell , 46 байтов
Попробуйте онлайн!
источник
n
чтобыx
вy<-[1..n]
так что вы можете вычислитьf 13
.C # (интерактивный компилятор Visual C #),
70-69 байтПорт моего ответа Java 8 , но выводит кортеж вместо строки для сохранения байтов.
Попробуйте онлайн.
источник
Желе , 15 байт
Попробуйте онлайн!
Полная программа, которая принимает один аргумент
n
и возвращает кортежx, y
.источник
Шелуха , 12 байт
Попробуйте онлайн!
объяснение
источник
MathGolf , 12 байт
Попробуйте онлайн!
Я бросаю радость Мэри, когда дело доходит до форматирования вывода. Если это не разрешено, у меня есть решение, которое на 1 байт длиннее. Выходной формат:
x.0y
где.0
разделитель между двумя числами.объяснение
Я черпал вдохновение из ответа Эминьи 05AB1E, но смог найти некоторые улучшения. Если выбранный разделитель недопустим, добавьте пробел перед последним байтом для числа байтов 13.
источник
APL (NARS), 906 байтов
Выше есть 2 функции sqrti функция , которая будет найти квадратный корень и Пелла функции пола будет возвращать Zilde для ошибок, и на основе чтения страницы http://mathworld.wolfram.com/PellEquation.html он будет использовать Algo для знают sqrt из числа trhu продолжить дробь (даже если я использую один алгоритм для знать sqrt, используя метод Ньютона) и остановится, когда он найдет p и q, такие что
Тест:
Существует ограничение для циклов в цикле в функции sqrti, и ограничение для циклов в цикле в функции Пелла, оба для возможного числа случаев слишком велики или, возможно, не сходятся ... (Я не знаю, является ли sqrti сходятся все возможные входы и тоже функция Пелла)
источник
Groovy , 53 байта
Попробуйте онлайн!
Порт Kevin Cruijssen Java и C # ответов «s
источник
Pyth, 15 байт
Попробуйте это онлайн здесь . Выходные данные
x
затемy
разделяются новой строкой.источник
Wolfram Language (Mathematica) , 41 байт
√
3-байтовый символ Unicode # 221A. Выводит решение в порядке (y, x) вместо (x, y). Как обычно, с несовершенным//.
и его ограниченными итерациями, работает только на входах, где истинное значениеy
не более 65538.Попробуйте онлайн!
источник
> <> , 45 байт
Попробуйте онлайн!
Алгоритм перебора, поиск сверху
x=2
вверх, сy=x-1
уменьшением в каждом цикле, увеличиваяx
приy
достижении 0. Выходx
сопровождаетсяy
, разделенный новой строкой.источник
C # (интерактивный компилятор Visual C #) , 69 байт
Попробуйте онлайн!
источник
Python 3 , 75 байт
Попробуйте онлайн!
объяснение
Этот код также будет выполняться в Python 2. Однако функция range () в Python 2 создает список вместо генератора, как в Python 3, и, таким образом, чрезвычайно неэффективна.
С помощью inifinte времени и памяти можно использовать понимание списка вместо итератора и сохранить 3 байта следующим образом:
Python 3 , 72 байта
Попробуйте онлайн!
источник
Python 2 , 64 байта
Попробуйте онлайн!
Возвращает
(x, y)
.источник