Знайдіть усі


13

Вступ

У теорії чисел ми говоримо, що число є -гладким, коли основними факторами є максимум . Наприклад, 2940 є 7-гладким, оскільки .kk2940=223572

Тут ми визначаємо пара -smooth як два послідовних цілих числа, які обидва є -smooth. Прикладом 7-гладкої пари буде тому що і . Забавний факт: це насправді найбільша 7-гладка пара .kk(4374,4375)4374=2374375=547

У 1897 р. Штормер довів, що для кожного існує лише кінцево багато гладких парkk , і цей факт відомий як теорема Стормера .

Виклик

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

Зауважте, що для простих чисел і , якщо вважати , всі -гладні пари також є -гладкими парами.pqp<qpq

Зразок вводу / виводу

Input: 2
Output: (1, 2)

Input: 3
Output: (1, 2), (2, 3), (3, 4), (8, 9)

Input: 5
Output: (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (8, 9), (9, 10), (15, 16), (24, 25), (80, 81)

Input: 7
Output: (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10), (14, 15),
        (15, 16), (20, 21), (24, 25), (27, 28), (35, 36), (48, 49), (49, 50), (63, 64),
        (80, 81), (125, 126), (224, 225), (2400, 2401), (4374, 4375)

Обмеження

Програма або функція теоретично повинна закінчуватися в кінцевий час для всіх входів. Стандартні лазівки заборонені за замовчуванням.

Критерії виграшу

Оскільки це проблема з , виграє найкоротше дійсне представлення кожної мови


2
Чи можете ви додати тестові випадки для 2, 3 та 5?
Джонатан Аллан

@JonathanAllan 2-, 3- і 5- гладкі пари включені до 7-гладких пар, але я додам випадки для ясності
Шиеру Асакото

1
Чи є обов'язковою (1, 2)частиною виходу продукція? ..
Кевін Кройсейсен

@KevinCruijssen Так, усі результати повинні містити (1, 2)пару.
Шиеру Асакото

Відповіді:


10

JavaScript (ES7),  234  232 байти

Знаходить розв’язання, розв’язуючи рівняння Пеля виду x22qy2=1 , де q - P гладке вільне число квадратних.

Це реалізація процедури Дерріка Генрі Лемера , похідна від початкової процедури Штормера.

Повертає об'єкт, чиї ключі та значення описують P -гладні пари.

P=>[...Array(P**P)].map((_,n)=>(s=(n,i=0,k=2)=>k>P?n<2:n%k?s(n,i,k+1):s(n/k,i,k+i))(n,1)&&(_=>{for(x=1;(y=((++x*x-1)/n)**.5)%1;);(h=(x,y)=>k--&&h(X*x+n*Y*y,X*y+Y*x,x&s(x=~-x/2)&s(x+1)?r[x]=x+1:0))(X=x,Y=y,k=P<5?3:-~P/2)})(),r={})&&r

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

Як?

Допоміжна функція s перевіряє, чи задане ціле число n - P гладке число, коли воно називається з i=0 , або квадратне вільне 1 P -гладне число, коли воно викликається з i=1 .

s = (
  n,
  i = 0,
  k = 2
) =>
  k > P ?
    n < 2
  :
    n % k ?
      s(n, i, k + 1)
    :
      s(n / k, i, k + i)

Шукаємо всі вільні квадратні 1 P -гладні числа в [1..PP1] , де PP використовується як верхня межа для P!.

P=>[...Array(P ** P)].map((_, n) => s(n, 1) && (...))

nx2ny2=1

(_ => {
  for(x = 1; (y = ((++x * x - 1) / n) ** .5) % 1;);
  ...
})()

(вищевказаний код - нерекурсивна версія моєї відповіді на цей інший виклик )

(x1,y1)(xk,yk)kmax(3,(P+1)/2)

xk+1=x1xk+ny1ykyk+1=x1yk+y1xk

xkxk(xk1)/2(xk+1)/2Pr

( h = (x, y) =>
  k-- &&
  h(
    X * x + n * Y * y,
    X * y + Y * x,
    x &
    s(x = ~-x / 2) &
    s(x + 1) ?
      r[x] = x + 1
    :
      0
  )
)(X = x, Y = y, k = P < 5 ? 3 : -~P / 2)

si=1


Привіт Арноульде! Я просто не міг обернути голову навколо цих двох: x = ~-x / 2і. -~P / 2Це якісь округлення ...
Рахул Верма,

1
~x-(x+1)~-x-(-x+1)x-1-~x-(-(x+1))x+1xP

4

Желе , 16 14 байт

4*ÆfṀ<ɗƇ‘rƝLÐṂ

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

4kk

Дякуємо @JonathanAllan за збереження 1 байта!

Пояснення

4*ÆfṀ<ɗƇ‘rƝLÐṂ  | Monadic link, input k

4*              | 4**k, call this n
      ɗƇ        | For each number from 1..n filter those where:
  Æf            |   - Prime factors
    Ṁ           |   - Maximum
     <  ‘       |   - Less than k+1
         rƝ     | Inclusive range between neighbouring values
           LÐṂ  | Keep only those of minimum length (i.e. adjacent values)

1
4kk!24k

1
Дякуємо за швидку відповідь. Я думав аналогічно, але ширше: "факторіал стає досить високим, він, мабуть, досить великий". (виявляється, це було не до того моменту, як я його накреслив). З повагою до коротшого та більш ефективного гольфу, ви отримали мою нагоду.
Товариш СпарклПоні

1
Примітка (від oeis.org/A002072 ) "a (n) <10 ^ n / n, за винятком n = 4. (Вироблено з експериментальних даних. - MF Hasler, 16 січня 2015 р." Я думаю, що ми повинні дотримуватися слабкої межі Лемера в projecteuclid.org/download/pdf_1/euclid.ijm/1256067456 (теорема 7), якщо не зможемо довести інше.
Джонатан Аллан

2
... Є питання щодо математики SE, яке запитує саме це!
Джонатан Аллан

1
@PeterTaylor - це кількість пар, а не максимальна кількість. Проблема в тому, що знання обмеженої максимальної кількості пар не дозволяє зупинити пошук
Нік Кеннеді


2

Желе , 123 байти

¹©Æ½Ø.;µU×_ƭ/;²®_$÷2ị$}ʋ¥⁸;+®Æ½W¤:/$$µƬṪ€F¹;Ḋ$LḂ$?ṭ@ṫ-ṚZæ.ʋ¥ƒØ.,U¤-ịWµ1ịżU×®W¤Ɗ$æ.0ị$ṭµ³’H»3¤¡
ÆRŒPP€ḟ2ḤÇ€ẎḢ€+€Ø-HÆfṀ€<ẠʋƇ‘

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

2×max(3,k+12)x12,x+12

k


2

Haskell , 118 107 байт

-11 байт завдяки німі

q 1=[1]
q n=(:)<*>q.div n$[x|x<-[2..n],mod n x==0]!!0
f k|let r=all(<=k).q=[(n,n+1)|n<-[1..4^k],r n,r(n+1)]

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

  • q n обчислює перелік усіх простих факторів n
  • f kk

1
Ви можете провести цикл [2..n]всередині pі встроїти його в q. Спробуйте в Інтернеті!
Ними

1

Желе , 24 байти

³!²R‘Ė
ÇÆFḢ€€€’<³FȦ$€Tị¢

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

Це займає тривалий час для 7, але він обчислюється набагато швидше, якщо ви вилучите квадратик із заводу: Спробуйте це в Інтернеті!

Пояснення:

³!²R‘Ė                Generates a list like [[1,2],[2,3],...]
³!²                  Take the square of the factorial of the input
   R                 Range 1 through through the above number.
    ‘Ė               Decrement and enumerate, yielding desired list


ÇÆFḢ€€€’<³FȦ$€Tị¢  
Ç                    Get the list of pairs  
 ÆF                  Get the prime factors of each number
   Ḣ€€€              Get the base of each
       ’<³           Is each base less than or equal to the input?
          FȦ$€       Check that all bases of a pair fit the above.
              T      Get a list of the truthy indexes
               ị¢    Index into the original list of pairs
                     Implicit output

-3 байти завдяки @JonathanAllen


1
Я не читаю Jelly, чи можете ви пояснити, як це працює?
Втілення

(8,9)8=239=32

Я не впевнений, що це все-таки. Що ви думаєте, що це буде дотримуватися?
Джонатан Аллан

@JonathanAllan Наївний оптимізм та факт, що для всіх прикладів, які я бачив (правда, не багато), найбільша пара менша k!(за винятком 3-х, у яких невеликий фактор, тому що це невелика кількість).
Товариш СпарклПоні

1
Верхня межа, яку ви використовуєте, - це максимальна кількість, що використовується в парі, а не кількість пар (ви не можете реалізувати верхню межу кількості пар таким чином, оскільки ви не знаєте, коли перестати шукати!) Дивіться теорему 7 для верхньої межі добутку найбільшої пари.
Джонатан Аллан

1

Python 3 + symy, 116 байт

import sympy
def f(k):x=[i for i in range(2,4**k)if max(sympy.factorint(i))<=k];return[(y,y+1)for y in x if y+1in x]

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

Python 3 + symy, 111 байт

from sympy import*
def f(k):
 b=1
 for i in range(2,4**k):
  x=max(factorint(i))<=k
  if x&b:print(i-1,i)
  b=x

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

Дві варіанти на мою відповідь Jelly, але в Python 3. Вони обидва визначають функцію, яка приймає аргумент k. Перший повертає список кортежів пар, які відповідають критеріям. Друга роздруковує їх для викреслювання.




1

05AB1E , 16 байт

°LʒfàI>‹}Xšü‚ʒ¥`

n>3

Пояснення:

°                # Take 10 to the power of the (implicit) input
 L               # Create a list in the range [1, 10^input]
  ʒ              # Filter this list by:
   fà            #  Get the maximum prime factor
     I>‹         #  And check if it's smaller than or equal to the input
        }Xš      # After the filter: prepend 1 again
           ü‚    # Create pairs
             ʒ   # And filter these pairs by:
              ¥` #  Where the forward difference / delta is 1


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