구성 가능한 n- 곤


10

작도 N-곤은 당신은 단지 나침반과 도장이 통치자로 구성 할 수있는 n 개의면을 가진 정다각형이다.

막내 곤을 작도에만 n은되는 가우스 의해 명시된 바와 같이 별개 페르마 소수의 번호 2의 거듭 제곱의 곱 (즉,. n = 2^k * p1 * p2 * ...k정수마다되는 p어떤 고유 페르마 프라임).

페르마 프라임은 양의 정수로 F (n) = 2 ^ (2 ^ n) +1로 표현할 수있는 소수입니다. 알려진 Fermat 소수는 0, 1, 2, 3 및 4입니다.

도전

정수가 주어지면 n>2n-gon이 구성 가능한지 말하십시오.

사양

프로그램이나 함수는 정수 또는 상기 정수 (단항, 이진, 십진수 또는 기타 기준)를 나타내는 문자열을 가져 와서 진실 또는 허위 값을 반환하거나 인쇄해야합니다.

이것은 코드 골프이므로 최단 답변이 이기고 표준 허점이 적용됩니다.

관련 OEIS

3 -> True
9 -> False
17 -> True
1024 -> True
65537 -> True
67109888 -> True
67109889 -> False

답변:


8

젤리 , 7 5 바이트

2 바이트를 절약 한 Sp3000에 감사합니다.

ÆṪBSỊ

다음 분류를 사용합니다.

이것도 phi (n)이 2의 거듭 제곱 인 숫자입니다.

여기서 phi오일러의 참을성있는 기능 입니다.

ÆṪ        # Compute φ(n).
  B       # Convert to binary.
   S      # Sum bits.
    Ị     # Check whether it's less than or equal to 1. This can only be the
          # case if the binary representation was of the form [1 0 0 ... 0], i.e. 
          e# a power of 2.

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

대안 적으로 (신용 xnor) :

ÆṪ’BP
ÆṪ        # Compute φ(n).
  ’       # Decrement.
   B      # Convert to binary.
    P     # Product. This is 1 iff all bits in the binary representation are
          # 1, which means that φ(n) is a power of 2.

내 Mathematica 답변 의 직접 포트 는 2 바이트 더 깁니다.

ÆṪ        # Compute φ(n).
  µ       # Start a new monadic chain, to apply to φ(n).
   ÆṪ     # Compute φ(φ(n)).
      H   # Compute φ(n)/2.
     =    # Check for equality.

젤리를 모르지만 최대 값이 2인지 확인하고 인수하여 2의 거듭 제곱을 확인할 수 있습니까? 또한 비트 AND의 선행 AND가 0인지 확인할 수도 있습니다.
xnor

@ xnor 흠, 좋은 생각이지만 그 시도는 길이가 같습니다. 리스트의 길이가 3 바이트 미만인 1인지 확인하는 방법이 있다면 (단지 지수 목록을 제공하는 인수 분해 함수를 사용하여) 더 짧을 것입니다. 그래도 방법을 찾을 수 없습니다.
Martin Ender

목록의 모든 요소가 동일한 지 확인하는 E가 있습니다. 숫자를 두 배로 늘리고 인수 분해 한 다음 모든 요소가 같은지 확인하면 어떻게됩니까?
xnor

@xnor 그것은 또한 좋은 생각입니다. :) 그건 아마도 다음 6 바이트 것이지만, SP3000가 있다고 지적 B하고 있는 나 5에서 테스트하자
마틴 청산

아 좋아. 이진, 이진 및 제품이 줄어드는 가능성이 있습니까?
xnor

3

Mathematica, 24 바이트

e=EulerPhi
e@e@#==e@#/2&

OEIS의 다음 분류를 사용합니다.

대의원이 대의원과 같은 숫자로 계산할 수 있습니다.

정수 의 계급 φ(x) 은에 대한 공통 x소수 인 아래의 양의 정수 입니다. cototient는 그렇지 않은 양의 정수의 수입니다 . totient는 그 totient의 수단 cototient 같으면 .xxx-φ(x)φ(x) == x/2

보다 간단한 분류

이것도 phi (n)이 2의 거듭 제곱 인 숫자입니다.

바이트가 더 길어집니다.

IntegerQ@Log2@EulerPhi@#&

cototients와 totients는 무엇입니까? 그리고 코 티티 오브 투 티 엔트와 티티 오브 투 티 엔트 비율은?
clismique

@ Qwerp-Derp의 totient는 n에 대한 ncoprime 인 아래의 정수 수 이고 n, cototient는 n그렇지 않은 정수의 수입니다 . 링크에서 편집하겠습니다.
마틴 엔더

Mathematica의 내장 기능은 나를 놀라게하지 않을 것입니다
Sefa

@ Qwerp-Derp 두 번째 질문에 관해서는의 공동 인의 공동 인을 계산한다는 것을 의미합니다 n.
Martin Ender

3

레티 나, 51 50 바이트

0+$

+`^(.*)(?=(.{16}|.{8}|....|..?)$)0*\1$
$1
^1$

입력이 이진입니다. 처음 두 줄은 2의 거듭 제곱으로 나뉘고 다음 두 줄은 알려진 모든 Fermat 프라임으로 나눕니다 (실제로 숫자가 Fermat 프라임의 곱인 경우). 편집 : @ Martin Ender ♦ 덕분에 1 바이트가 절약되었습니다.


이진 입력은 물론 Fermat 소수에 대한 가정
Sefa

2

자바 스크립트 (ES7), 61 바이트

n=>[...Array(5)].map((_,i)=>n%(i=2**2**i+1)?0:n/=i)&&!(n&n-1)


0

배치, 97 바이트

@set/pn=
@for /l %%a in (4,-1,0)do @set/a"p=1<<(1<<%%a),n/=p*!(n%%-~p)+1"
@cmd/cset/a"!(n-1&n)"

입력은 십진법으로 stdin에 있습니다. 이것은 실제로 2의 거듭 제곱을 반복적으로 계산하는 것보다 1 바이트 더 짧습니다. @xnor의 power of 2 check를 사용하여 1 바이트를 절약했습니다.

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