Найменший коефіцієнт обміну невикористаною кількістю


11

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

  • Перший пункт у послідовності - 2.

  • П'ятий елемент у послідовності - це найменше додатне ціле число, окрім n та 1, що ділиться принаймні на один коефіцієнт з n (крім 1), який ще не з’явився у списку.

Тестові справи

Ось перші 25 пунктів у такій послідовності:

1  2
2  4
3  6
4  8
5  10
6  3
7  14
8  12
9  15
10 5
11 22
12 9
13 26
14 7
15 18
16 20
17 34
18 16
19 38
20 24
21 27
22 11
23 46
24 21
25 30

Споріднені (компенсовані одним) OEIS

Відповіді:



3

Python 3 , 118 117 байт

-1 байт завдяки Камерону Аавіку !

import math
def f(n,i=3):
 if n<2:return 2
 while 1:
  if math.gcd(n,i)>1>(i in map(f,range(n)))<i!=n:return i
  i+=1

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

Код є досить неефективним (він грубо примушує значення, яке не існує в попередніх результатах, і обчислює попередні результати знову за кожним новим значенням), тому він працює належним чином, але я б не рекомендував використовувати його у великій кількості.


2
Невелика порада: Ви можете зберегти нову лінію, зробивши її def f(n,i=3):та видаливши i=3лінію
Камерон Аавік


2

Haskell , 60 59 байт

Редагувати:

  • -1 байт: @xnor вказав, all(/=x)було коротшеx`notElem` .

f приймає ціле число і повертає ціле число.

f n=[x|x<-[2..],gcd x n>1||n<2,all(/=x)$n:map f[1..n-1]]!!0

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

Це дуже експоненціальний час, тому TIO закінчується після 21, тоді як мої інтерпретовані GHCi отримали до 22, перш ніж я зупинив це саме зараз. Наступні 9 байт довшої версії, що запам'ятовується у списку, легко перетворюється на тисячі:

f n=[x|x<-[2..],gcd x n>1||n<2,all(/=x)$n:take(n-1)l]!!0
l=f<$>[1..]

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

  • f nвикористовує розуміння списку для генерації кандидатів x, приймаючи перше, що проходить !!0.
  • gcd x n>1перевіряє це xта nмає загальні фактори.
  • ||n<2звільняє n==1від вимоги фактор.
  • all(/=x)$n:map f[1..n-1]перевіряє, що xне є ні nпопереднім елементом послідовності.

@WheatWizard Гм, напевно, різниці в цьому випадку немає. Просто звик робити це за замовчуванням. Це одна з небагатьох буквено-цифрових функцій, яка визначає фіксованість, щоб добре відповідати цьому шляху.
Ørjan Johansen

1
all(/=x)$там на 1 коротше
xnor

2

У C # немає вбудованого GCD, тому ...

C # (.NET Core) , 197 196 194 байт

n=>{if(n<2)return 2;var p=new int[n-1];int i=0,a,b;for(;i<n-1;)p[i]=f(++i);for(i=2;;i++)if(n!=i){for(a=n,b=i;a*b>0;)if(a>b)a%=b;else b%=a;if(b!=1&a!=1&!System.Array.Exists(p,e=>e==i))return i;}}

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

Ще раз утримайтеся від використання цього коду для обчислення чисел у послідовності для n>30...

  • -1 байт, змінивши whileцикл GCD на forцикл.
  • -2 байти завдяки Kevin Cruijssen! Хороший!

1
a>0&b>0можна пограти в гольф доa*b>0
Кевін Круїссен

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