모든


13

소개

정수론에서, 우리는 숫자라고 k 의 주요 요인은 대부분의 모든 때 매끄러운 k . 예를 들어, 2,940 때문에 7- 평활 2940=223572 .

여기서, 우리는 정의 k 양이 두 개의 연속적인 정수로 매끄러운 쌍 k 매끄러운한다. 43- 스무스 페어의 예는 4374 = 2 3 74375 = 5 47 이므로 (4374,4375) 됩니다. 재미있는 사실 : 이것은 실제로 가장 큰 7 스무스 페어 입니다.4374=2374375=547

스토 머는 1897 년에 증명 모든 위해 k , 유일한 유한으로 많습니다 k 매끄러운 쌍 ,이 사실로 알려져 스토 머의 정리 .

도전

귀하의 작업은 소수 입력 k 주어지면 원하는 순서로 복제없이 ( k 쌍 내 순서는 중요하지 않음) 모든 k 평활 쌍을 출력하거나 반환 하는 프로그램이나 함수를 작성하는 것입니다.

소수에 대한 것을 주목하시기 바랍니다 pq , 가정 p<q , 모든 p 매끄러운 쌍 또한 q 매끄러운 쌍.

샘플 I / O

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에 대한 테스트 사례를 추가 할 수 있습니까?
Jonathan Allan

2 @JonathanAllan, 3 및 5 쌍은 7 매끄러운 쌍에 포함되어 부드럽게,하지만 난 명확성을 위해 사례를 추가합니다
Shieru Asakoto

1
(1, 2)필수 출력의 일부를 ..?
케빈 Cruijssen

@KevinCruijssen 예, 모든 출력은 (1, 2)쌍을 포함해야합니다 .
Shieru Asakoto

답변:


10

자바 스크립트 (ES7)  234  232 바이트

x22qy2=1 형식의 Pell 방정식을 풀고 해를 구합니다 . 여기서 qP 평활 제곱 자유 수입니다.

이것은 Størmer의 원래 절차에서 파생 된 Derrick Henry Lehmer 절차의 구현입니다 .

키와 값이 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 A는 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) && (...))

위에서 찾은 각 숫자 n 에 대해 Pell 방정식 x2ny2=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


안녕 Arnauld! 난 그냥이 두 가지 주위에 내 머리를 감싸 수 없습니다 : x = ~-x / 2그리고. -~P / 2이것은 일종의 반올림입니다 ...
Rahul Verma

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

4

젤리 , 16 14 바이트

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

온라인으로 사용해보십시오!

4kk

1 바이트를 절약 해 준 @JonathanAllan에게 감사합니다!

설명

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
빠른 응답 감사합니다. 나는 비슷한 생각을했지만, 더 광범위하게는 : "요인은 꽤 빨리 올라갑니다. 아마도 충분히 클 것입니다." (제곱하지 않으면 그렇지 않았습니다). 더 짧고 효율적인 골프를 축하합니다.
동지 SparklePony

1
참고 ( oeis.org/A002072 ) "a (n) <10 ^ n / n <n ^ 4 제외 (실험 데이터에서 추측) -MF Hasler, 2015 년 1 월 16 일". 우리가 달리 증명할 수 없다면 projecteuclid.org/download/pdf_1/euclid.ijm/1256067456(7 번 정리) 에서 Lehmer의 약점을 고수해야한다고 생각 합니다.
Jonathan Allan

2
... Mathematics SE에 대해서도 공개 질문 이 있습니다.
Jonathan Allan

1
@PeterTaylor 최대 쌍이 아닌 쌍의 수입니다. 문제는 최대 쌍 수에 대한 제한이 검색을 중단시키지 못한다는 것입니다.
Nick Kennedy


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



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

@JonathanAllen 덕분에 -3 바이트


1
젤리를 읽지 않습니다. 어떻게 작동하는지 설명해 주시겠습니까?
무지의 구체화

(8,9)8=239=32

그래도 확실하지 않습니다. 무엇이 당신을 붙잡을 것이라고 생각합니까?
Jonathan Allan

@JonathanAllan Naive 낙관론과 내가 본 모든 사례에 대한 사실은 (많은 사람은 아니지만) 가장 큰 쌍은 적습니다 k!(3은 제외하고 소수이기 때문에 작은 계승이 있음).
동지 SparklePony

1
사용중인 상한은 쌍 수가 아닌 한 쌍에 사용되는 최대 수에 있습니다 (이 시점에서보고 중지하는 것을 알지 못하므로 쌍 수에 상한을 구현할 수 없습니다!) 가장 큰 쌍의 곱에 대한 상한은 정리 7을 참조하십시오.
Jonathan Allan

1

파이썬 3 + sympy, 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]

온라인으로 사용해보십시오!

파이썬 3 + sympy, 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

온라인으로 사용해보십시오!

젤리 답변에 대한 두 가지 변형 이지만 파이썬 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

0

Stax , 14 바이트

Θ",²aÇu,á‼⌐çLB

실행 및 디버깅

이 프로그램은 가능한 가장 짧은 프로그램은 아니지만 일치하는 쌍을 찾 자마자 출력을 시작합니다. 결국 종료 되지만 출력이 발견되면 생성됩니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.