Codegolf — Числа X Такие, Что X^2 Делит 7^X-1

  • Автор темы Cne5vjhe
  • Обновлено
  • 22, Oct 2024
  • #1

Задача

Есть набор цифр

 In   Out
3    3
9    24
31   1140
 
, such that 7^x-1 делит x^2 .

Ваша задача — найти эти числа. Если введено n, код выведет n-е число, соответствующее этому правилу.

Примеры 1-индекс

x

Соответствующую последовательность можно найти здесь.

Правила

Самый короткий ответ станет победителем*

Применяются стандартные правила игры в гольф.

Лазейки не разрешены

Ваш ответ может иметь индекс 0 или 1, укажите это в своем ответе.

#код-гольф #математика #последовательность

Cne5vjhe


Рег
05 Jun, 2005

Тем
77

Постов
198

Баллов
613
  • 26, Oct 2024
  • #2

Хаскель, 34 байта

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 while {[incr i]} {if 0==(7**$i-1)%$i**2 {incr j;if $j==$n break}}
puts $i
 

При этом используется индексация, отсчитываемая от 0. Пример использования: 7^x-1 -> x^2 .

Это прямая реализация определения. Он строит список всех чисел (@:^#0(!>@! % - ^7#0 1^#0 2)N)2 and picks the @:^#0(!>@! % - ^7#0 1^#0 2)N й.

 

Sanek354


Рег
19 Mar, 2020

Тем
78

Постов
222

Баллов
622
  • 26, Oct 2024
  • #3

Пиф, 10 байт

:{ get N from the command line, start an infinite DO-loop ~ IF (7^q-1) Part 1 of the formula (Note that 'q' is set to 1 as QBIC starts) % Modulus (q^2) The second part =0 has no remainder |b=b+1 Then, register a 'hit' ] END IF ~b=a If we have scored N hits |_Xq Quit, printing the last used number (q) \q=q+1 Else, increase q by 1. [DO-loop and last IF are implicitly closed by QBIC]

Программа, которая принимает на вход целое число и печатает значение с одним индексом.

Попробуйте онлайн!

Как это работает

:{~(7^q-1)%(q^2)=0|b=b+1]~b=a|_Xq\q=q+1 ||answer||

JavaScript (ES7), 40 байт

{grep({(7**$_-1)%%$_²},^∞)[$_]}

Это теряет точность довольно быстро из-за того, что JS теряет точность на [System.Linq.Enumerable]::Range(1,10000)|?{[System.Numerics.BigInteger]::Remainder([System.Numerics.BigInteger]::Pow(7,$_)-1,$_*$_) -eq 0} . Here's a nearly arbitrary-precision ES6 version:

map{$_ if!((7**$_-1)%($_**2))}1..<>

Для тестового примера 31 это заканчивается примерно через секунду.

Несколько более длинных подходов:

(fn[n](nth(filter #(= 0(rem(-(reduce *(repeat % 7N))1)(* % %)))(iterate inc 1N))n)) ||answer||

05AB1E, 11 байт

~1 - infinite(1) IX7i^tR% - filter(^, not V) 7i^ - 7**i t - ^-1 R% - ^ % v X - i**2 - implicit: print nth value

Попробуйте онлайн!

По какой-то причине я не могу получить ~1IX7i^tR% to work in implicit: $x = 0, $n = 0 while $n < first command line argument increment $x if equation is satisfied increment $n print $x иначе я был бы связан с Питом.

php -nr '<code>' <n>

.

 

Кэти Никки


Рег
28 Apr, 2011

Тем
78

Постов
182

Баллов
592
  • 26, Oct 2024
  • #4

Питон 2, 48 46 байт

Спасибо @Dennis за -2 байта!

for($x=$n=1;$n<$argv[1];)$n+=bcpowmod(7,++$x,$x**2)==1;echo$x;

Одноиндексная рекурсивная функция, которая принимает входные данные через аргумент и возвращает результат.

Попробуйте онлайн! (Увеличен лимит рекурсии, чтобы можно было выполнить финальный тестовый пример)

Как это работает

PHP_INT_MAX is the desired index, and 7**9 является счетной переменной.

Выражение while($n<$argv[1])$n+=(7**++$x-1)%$x**2<1;echo$x; returns z=1:1e6;which(gmp::as.bigz(7^z-1)%%z^2==0)[scan()] (эквивалентно n<=25 ) if z=1:20;which(!(7^z-1)%%z^2)[scan()] делит n<=8 , and f=lambda n,k=2:n<2or-~f(n-(7**k%k**2==1),k+1) (эквивалентно n->=k=1;for(i=2,n,while((7^k++-1)%k^2,));k ) otherwise. Each time the function is called, the result of the expression is subtracted from n->=k=1;while(n--,while((7^k++-1)%k^2,));k , уменьшение Nest[#+1//.x_/;!(x^2∣(7^x-1)):>x+1&,0,#]& Nest[#+1//.x_/;Mod[7^x-1,x^2]>0:>x+1&,0,#]& Nest[#+1//.x_:>x+Sign@Mod[7^x-1,x^2]&,0,#]& each time a hit is found; lambda n:[x for x in range(1,2**n+1)if(7**x-1)%x**2<1][n] также увеличивается.

Короткое замыкание i=0 g=input() while g:i+=1;g-=~-7**i%i**2<1 print i means that when i является i , 0 возвращается; это базовый случай. Как только это достигается, рекурсия останавливается, и текущее значение -~ is returned by the original function call. Rather than explicitly using i , это делается за счет того, что для каждого вызова функции приращение выполняется с помощью i in front of the call; incrementing 0 0 times gives n , как требуется.

 

Chentsov1998


Рег
28 Oct, 2019

Тем
75

Постов
210

Баллов
585
  • 26, Oct 2024
  • #6

Питон 2, 57 байт

Это действительно требует усилий, Действительно долгое время для больших значений. Он также использует много памяти, поскольку строит весь список дальше, чем необходимо. Результат имеет нулевой индекс.

i

Попробуйте онлайн

 

Vnikitin07


Рег
16 Feb, 2011

Тем
56

Постов
176

Баллов
486
  • 26, Oct 2024
  • #7

Математика, 43 байта

В настоящее время у меня есть три разных решения с таким количеством байтов:

n ||answer||

ПАРИ/ГП, 42 байта

Довольно просто. 1-индексирован, хотя это можно легко изменить.

n

или

0 ||answer||

Питон 3, 45 байт

False

Возвращаться Истинный для ввода 1, что разрешено по умолчанию.

Попробуйте онлайн!

 

Mlamichhane


Рег
10 Apr, 2009

Тем
95

Постов
201

Баллов
686
  • 26, Oct 2024
  • #8

Р, 35 байт

Это работает только для 7^i - 1 .

i^2

Однако вот более длинная версия, которая работает для 1 , for 50 байт:

True ||answer||

PHP, 47 49 байт

~-7**i%i**2<1

Работает только для n<9 ( i is larger than n с 64битной)

62 байта использование целых чисел произвольной длины: (не тестировалось; PHP на моей машине не имеет bcmath)

f=lambda n,i=1:n and-~f(n-(~-7**i%i**2<1),i+1)

Беги с µ # Loop until the counter equals n. 7Nm< # Calc 7^x+1. Nn # Calc x^2. Ö # Check divisibility. iN¼ # If divisible, push current x and increment counter. # Implicit loop end. # Implicitly return top of stack (x) .

псевдокод

µ7Nm<NnÖ½N ||answer||

Пайк, 10 байт

½

Попробуйте здесь!

µ7Nm<NnÖiN¼ ||answer||

Кложур, 83 байта

f=(n,i=0)=>n?f(n-!(~-(s=>g=j=>j?g(j-1)*7%s:1)(++i*i)(i)%s),i):i f=(n,i=0)=>n?f(n-!(s=++i*i,g=(j,n=1)=>j?g(j-1,n*7%s):~-n%s)(i),i):i f=(n,i=0)=>n?f(n-!(s=>g=(j,n=1)=>j?g(j-1,n*7%s):~-n%s)(++i*i)(i),i):i

Попробуйте онлайн!

Это создает бесконечный список Java BigInteger, начиная с 1, и фильтрует их по определению. Он использует индексацию с отсчетом от нуля для выбора нй значение из отфильтрованного списка.

 

Petricmix


Рег
11 Mar, 2014

Тем
73

Постов
193

Баллов
568
  • 26, Oct 2024
  • #9

Перл 5, 35 байт

Ну, этого не хватало, вот оно:

f=(n,i=0)=>n?f(n-!(~-(s=++i*i,g=j=>j?g(j-1)*7%s:1)(i)%s),i):i

 

Марія Іманків


Рег
06 Oct, 2011

Тем
72

Постов
200

Баллов
600
  • 26, Oct 2024
  • #10

Powershell, слишком много байтов

Просто чтобы посмотреть, возможно ли это, и это так.

7**19 ||answer||

Perl 6, 35 34 байта

f=(n,i=1)=>n?f(n-!((7**++i-1)%i**2),i):i

0-индексированный.

Сэкономил один байт благодаря Брэду Гилберту.

 

PHROM


Рег
25 Dec, 2006

Тем
74

Постов
185

Баллов
565
  • 26, Oct 2024
  • #11

КБИК, 39 байт

e.f!%t^7Z* Program. Input: Q e.f!%t^7Z*ZZQ Implicit variable fill Implicitly print e the last .f Q of the first Q positive integers Z t^7Z for which 7^Z - 1 % mod *ZZ Z^2 ! is zero

Мне не удалось запустить его в QBasic 4.5, но в QB64 он, похоже, работает нормально. По какой-то необъяснимой причине QBasic отказывается четко разделить 13 841 287 200 на 144, а вместо этого дает остаток -128. Затем он возвращает 16 в качестве 7-го члена этой последовательности вместо 12...

e.f!%t^7Z* ||answer||

Удивляться, 28 байт

n

С нулевым индексом. Использование:

x

Фильтрует список натуральных чисел с предикатом, определяющим, 1140 is divisible by ([x|x<-[1..],mod(7^x-1)(x^2)<1]!!) 30 , затем получает n-й элемент в этом списке.

 

DENISDEX


Рег
11 May, 2006

Тем
59

Постов
168

Баллов
513
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно