Числа x такі, що x ^ 2 ділить 7 ^ x-1


16

Завдання

Існує набір чисел x, таких, що x^2ділиться 7^x-1.

Ваше завдання - знайти ці цифри. За умови введення n, код надрукує n-й номер, що відповідає цьому правилу.

Приклади 1-індекс

In   Out
3    3
9    24
31   1140

Відповідну послідовність можна знайти тут .

Правила

Найкоротшою відповіддю буде переможець *

Діють стандартні правила гольфу

Лазівки заборонені

Ваша відповідь може бути індексованою 0 або 1, будь ласка, вкажіть свою відповідь


@nimi Я записав це під час планування і ніколи їх не реалізував. Я оновив питання
Джордж

Які межі n? Я можу дати правильний результат n=9, але n=10це вже викликає у мене проблеми.
британіст

@briantist Якщо ви отримуєте неправильний результат для більш високих вхідних значень, ваша відповідь неправильна. Якщо це займе багато часу, це може залежати від реалізації.
mbomb007

Це не просто тривалий час. n=10дає мені 32; це тому, що він починає використовувати подвійні замість цілих чисел, і мод помиляється після цього. :(
британіст

Відповіді:


8

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

([x|x<-[1..],mod(7^x-1)(x^2)<1]!!)

Тут використовується індексація на основі 0. Приклад використання:([x|x<-[1..],mod(7^x-1)(x^2)<1]!!) 30 -> 1140.

Це пряма реалізація визначення. Він будує список усіх чисел xі вибирає nth.


5

Pyth , 10 байт

e.f!%t^7Z*

Програма, яка приймає введення цілого числа і друкує одноіндексоване значення.

Спробуйте в Інтернеті!

Як це працює

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

5

JavaScript (ES7), 40 байт

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

Це втрачає точність досить швидко через те, що JS втрачає точність на 7**19. Ось майже довільна точність версії ES6:

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

Це закінчується протягом приблизно секунди для тестового випадку 31.

Кілька довших підходів:

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

4

05AB1E , 11 байт

µ7Nm<NnÖiN¼

Спробуйте в Інтернеті!

Чомусь я не можу влаштуватися ½на роботу µ7Nm<NnÖ½Nабо я буду прив’язаний до Pyth.

µ           # 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)

.


Так, у мене ця вигадка була Öв моєму списку виправлень протягом місяців, але я ніколи не замислююся з цим. У будь-якому випадку, вам не потрібно, Nоскільки µавтоматично виводиться останній, Nякщо стек порожній.
Емінья

4

Python 2 , 48 46 байт

Дякуємо @Dennis за -2 байти!

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

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

Спробуйте в Інтернеті!(Ліміт рекурсії збільшений, щоб дозволити запуск остаточного тестового випадку)

Як це працює

n - бажаний індекс, і i є лічильною змінною.

Вираз ~-7**i%i**2<1повертається True(еквівалентно 1), якщо i^2ділиться 7^i - 1, і False(еквівалентно 0) інакше. Щоразу, коли функція викликається, результат вираження віднімається від n, зменшуючи nщоразу, коли знайдеться хіт;iтакож збільшується.

Поведінка короткого замикання andозначає, що коли nє 0, 0повертається; це базовий випадок. Як тільки це досягнуто, рекурсія припиняється, а поточне значення iповертається вихідним викликом функції. Замість того, щоб явно використовувати i, це робиться, використовуючи той факт, що для кожного виклику функції виконується приріст, використовуючи -~перед викликом; збільшення 0 iчасу дає i, як потрібно.


1
(~-7**i%i**2<1)економить пару байт.
Денніс

@Dennis Звичайно! Спасибі.
TheBikingViking

3

Python 2 , 57 53 51 байт

-4 байти завдяки ETHproductions
-2 байти завдяки TuukkaX

i=0
g=input()
while g:i+=1;g-=~-7**i%i**2<1
print i

Спробуйте в Інтернеті!
послідовність є 1-індексованою


@ETHproductions yep c:
Род

Чи не виходить тестова скринька, якщо ви видалите круглі дужки навколо (7**i)? Я видалив їх, і це спрацювало для тих, кого я спробував.
Yytsi

@TuukkaX дійсно, **має більш високий пріоритет , ніж ~та-
Rod

2

Python 2, 57 байт

Для великих значень це потребує дуже- дуже довгого часу. Він також використовує багато пам’яті, оскільки він будує весь список набагато далі, ніж потрібно. Результат - нульовий показник.

lambda n:[x for x in range(1,2**n+1)if(7**x-1)%x**2<1][n]

Спробуйте в Інтернеті


з цікавості, чи є докази для 2**n+1верхньої межі?
Стержень

@Rod Не те, що я знаю, але враховуючи, що є 50 значень <5000, я впевнений, що це набагато більше 50 < 2**50. Я міг би скористатися 9**n+9, але це займає набагато більше часу. Я почав бігати f(20)деякий час тому (з 2**n+1); він ще не завершився.
mbomb007

Я навіть не думаю, що є доказ того, що послідовність нескінченна, не кажучи вже про гарну верхню межу для n-го терміна!
Грег Мартін

2

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

На даний момент у цього байта є три різні рішення:

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,#]&

Який персонаж між x ^ 2 та (7 ^ x ... у першому рядку? Це схоже на трубу, але коротше
Сефа

@Sefa Це символ Unicode для математичного символу "ділиться" і використовується Mathematica як оператор для Divisible.
Мартін Ендер

Ось один на 41 байт: Cases[Range[#^3],x_/;x^2∣(7^x-1)][[#]]&грунтуючись на евристичному аргументі, що n ^ 3 - це верхня межа. Я виявив справді чудовий доказ цього, який цей запас занадто вузький, щоб містити :)
Келлі Лоудер

2

PARI / GP , 42 байти

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

n->=k=1;while(n--,while((7^k++-1)%k^2,));k

або

n->=k=1;for(i=2,n,while((7^k++-1)%k^2,));k


1

R, 35 байт

Це працює лише для n<=8.

z=1:20;which(!(7^z-1)%%z^2)[scan()]

Однак ось довша версія, яка працює n<=25на 50 байт :

z=1:1e6;which(gmp::as.bigz(7^z-1)%%z^2==0)[scan()]

Це спрацьовує лише 8тому, що воно стає довгим?
Джордж

1
@george Так, ви втрачаєте точність, оскільки R за замовчуванням до 32 бітових цілих чисел. У другій версії коду використовується пакет gmp, який дозволяє довільно великі цілі числа. Однак у мене швидко закінчується оперативна пам’ять для обчислення будь-якого вище n=25.
rturnbull

0

PHP, 47 49 байт

while($n<$argv[1])$n+=(7**++$x-1)%$x**2<1;echo$x;

Працює лише для n <9 ( 7**9більше, ніж PHP_INT_MAXу 64-бітових)

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

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

Бігайте з php -nr '<code>' <n>.

псевдо-код

implicit: $x = 0, $n = 0
while $n < first command line argument
    increment $x
    if equation is satisfied
        increment $n
print $x


0

Clojure , 83 байти

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

Спробуйте в Інтернеті!

Це створює нескінченний список Java BigIntegers, починаючи з 1, і фільтрує їх за визначенням. Він використовує нульову індексацію для вибору n- го значення зі списку відфільтрованих.


0

Perl 5, 35 байт

Що ж, цього не було, тож ось:

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


0

Powershell, занадто багато байт

Тільки щоб побачити, чи можна було так і є.

[System.Linq.Enumerable]::Range(1,10000)|?{[System.Numerics.BigInteger]::Remainder([System.Numerics.BigInteger]::Pow(7,$_)-1,$_*$_) -eq 0}

0

Perl 6 , 35 34 байт

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

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

Поголив один байт завдяки Бреду Гілберту.


grep - це підпрограма, так що ви можете видалити простір, якщо помістити паролі після неї{grep(…)}
Брэд Гілберт b2gills

0

QBIC , 39 байт

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

Я не міг змусити його працювати в QBasic 4.5, але, здається, він працює добре в QB64. З якоїсь незрозумілої причини QBasic відмовляється чітко розділити 13,841,287,200 на 144, а натомість дає залишок -128. Потім він повертає 16 як 7-й член цієї послідовності замість 12 ...

:{      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]

0

Диво , 28 байт

@:^#0(!>@! % - ^7#0 1^#0 2)N

Нульова індексація. Використання:

(@:^#0(!>@! % - ^7#0 1^#0 2)N)2

Фільтри зі списку натуральних чисел із присудком, який визначає, чи x^2ділиться на 7^x-1, то отримує n-й елемент у цьому списку.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.