n 번째 완벽한 힘을 찾아라!


16

완벽한 힘은 여러 형태 a**b, 어디서 a>0그리고 b>1.

예를 들어 125로 표현 될 수 있기 때문에 완벽한 힘 5**3입니다.

당신의 임무는 n양의 정수가 주어지면-번째 완벽한 힘 을 찾는 프로그램 / 함수를 작성하는 것 n입니다.

명세서

  • 최초의 완벽한 전력이다 1(이다 1**2).
  • 합리적인 형식의 입력 / 출력.
  • 내장이 허용 됩니다.

추가 정보

채점

이것은 입니다. 바이트 단위의 최단 솔루션이 승리합니다.

테스트 케이스

input  output
1      1
2      4
3      8
4      9
5      16
6      25
7      27
8      32
9      36
10     49

1
이 숫자는 몇 개까지 작동합니까? 무한대?
ghosts_in_the_code

합리적인 금액.
Leaky Nun

1 비트의 데이터 유형 만 사용하는 언어는 어떻습니까?
ghosts_in_the_code

1
@ Agawa001 네, 더 이상 재미없는 표준 허점 입니다.
flawr

답변:


8

젤리 , 11 바이트

µÆE;¬g/’µ#Ṫ

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

배경

모든 양의 정수 k 는 첫 번째 m 소수 의 거듭 제곱 , 즉 k = p 1 α 1 ⋯ p m α m으로 고유하게 인수 분해 될 수 있습니다 . 여기서 α m > 0 입니다.

우리가 그 B ( B> 1 의 정수 긍정적 용) 의 경우에만, b는 모든 지수의 제수 인 α j는 .

따라서 정수 k> 1gcd (α 1 , ⋯, α m ) ≠ 1 인 경우에만 완벽한 거듭 제곱 입니다.

작동 원리

µÆE;¬g/’µ#Ṫ  Main link. No arguments.

µ            Make the chain monadic, setting the left argument to 0.
        µ#   Find the first n integers k, greater or equal to 0, for which the
             preceding chain returns a truthy value.
             In the absence of CLAs, n is read implicitly from STDIN.
 ÆE          Compute the exponents of the prime factorization of k.
   ;¬        Append the logical NOT of k, i.e., 0 if k > 0 and 1 otherwise.
             This maps 1 -> [0] and [0] -> [1].
     g/      Reduce the list of exponents by GCD.
             In particular, we achieved that 1 -> 0 and 0 -> 1.
       ’     Decrement; subtract 1 from the GCD.
             This maps 1 to 0 (falsy) and all other integers to a truthy value.
          Ṫ  Tail; extract the last k.

나는 STDIN을 전혀 보지 못했습니다. 나는 그것을 어떻게 사용하는지 전혀 모른다.
Leaky Nun

소인수 분해와 관련된 완벽한 검정력의 정의를 잘 사용합니다. 설명에이 알고리즘을 포함시킬 수 있습니까?
Leaky Nun

@KennyLau 완료.
Dennis

21 ^ 2가 인수 분해에서 첫 번째 또는 세 번째 소수를 어떻게 포함하는지 이해하지 못합니다. "모든 양의 정수 k는 첫 번째 m 소수의 거듭 제곱으로 어디에서 [지수] a_n > 0입니까?" 21 ^ 2의 인수 분해에서 p = 2 및 p = 5의 지수는 0입니다.
גלעד ברקן

@ גלעדברקן 죄송합니다, a_m> 0 이어야합니다 . 이전의 m-1 지수는 0을 포함 할 수 있습니다.
Dennis

6

Mathematica, 34 바이트

(Union@@Array[#^#2#&,{#,#}])[[#]]&

생성 N × N 어레이 IJ = I 1 + J를 1,이를 병합, 복귀 N 번째 요소.


3

CJam, 16 바이트

ri_),_2f+ff#:|$=

여기에서 테스트하십시오.

설명

이것은 LegionMammal의 Mathematica 답변과 비슷한 아이디어를 사용합니다.

ri    e# Read input and convert to integer N.
_),   e# Duplicate, increment and turn into range [0 1 ... N].
_2f+  e# Duplicate and add two to each element to get [2 3 ... N+2].
ff#   e# Compute the outer product between both lists over exponentiation.
      e# This gives a bunch of perfect powers a^b for a ≥ 0, b > 1.
:|    e# Fold set union over the list, getting all unique powers generated this way.
$     e# Sort them.
=     e# Retrieve the N+1'th power (because input is 1-based, but CJam's array access
      e# is 0-based, which is why we included 0 in the list of perfect powers.

3

옥타브, 57 31 30 바이트

@(n)unique((1:n)'.^(2:n+1))(n)

방금 옥타브가 필요하지 않다는 것을 다시 알았습니다 ndgrid(Matlab은) =)



3

세이지 (버전 6.4, 아마도 기타) : 64 63

lambda n:[k for k in range(1+n^2)if(0+k).is_perfect_power()][n]

n완벽한 힘 을 반환하는 람다 함수를 만듭니다 . 우리는 그것이 첫 번째 n^2정수 내에서 발견된다는 사실에 의존합니다 . ( 1+n^2에 필요합니다 n=1,2. 0+k비트는로 변환 int(k)해야합니다.Integer(k) .)

바이트 오프 xrange->range 감사 데니스.

재미있는 사실 : 0Sage의 표준에 의한 완벽한 힘입니다. 다행히도 10 번째가 아닌 목록의 첫 번째 요소 이기 때문 입니다. :)


그래서 이것은 주요한 힘 부분을 제외하고 파이썬입니까?
CalculatorFeline

@CatsAreFluffy 그리고is_perfect_power()
yo '



1

줄리아, 64 32 바이트

n->sort(∪([1:n]'.^[2:n+1]))[n]

이것은 정수를 허용하고 정수를 반환하는 익명 함수입니다. 호출하려면 변수에 지정하십시오.

여기에있는 아이디어는 LegionMammal의 Mathematica 답변 과 동일합니다 . 우리는 정수 1에서 n까지 2에서 n + 1 까지 의 외부 곱을 취하고 결과 행렬을 열 단위로 축소하고 고유 한 요소를 취하여 정렬하고 n 번째 요소를 얻습니다. .

온라인으로 사용해보십시오! (모든 테스트 케이스 포함)


1

자바 스크립트 (ES6), 87

n=>(b=>{for(l=[i=0,1];b<n*n;++b)for(v=b;v<n*n;)l[v*=b]=v;l.some(x=>n==i++?v=x:0)})(2)|v

덜 골프

f=n=>{
  for(b=2, l=[0,1]; b < n*n; ++b)
    for(v = b; v < n*n;)
      l[v*=b] = v;
  i = 0;
  l.some(x => n == i++ ? v=x : 0);
  return v;
  // shorter alternative, but too much memory used even for small inputs
  // return l.filter(x=>x) [n-1];
}

테스트

f=n=>(b=>{for(l=[i=0,1];b<n*n;++b)for(v=b;v<n*n;)l[v*=b]=v;l.some(x=>n==i++?v=x:0)})(2)|v

function test(){
  var v=+I.value
  O.textContent=f(v)
}
  
test()
<input type=number id=I value=10><button onclick='test()'>-></button>
<span id=O></span>


1

실제로, 18 바이트 (비경쟁)

;;u@ⁿr;`;√≈²=`M@░E

온라인으로 사용해보십시오! (업데이트가 필요하여 작동하지 않을 수 있음)

이 솔루션 E을 게시 한 후 버그를 수정했기 때문에이 솔루션은 경쟁이 아닙니다 .

설명:

;;u@ⁿr;`;√≈²=`M@░E
;;u@ⁿr              push range(n**(n+1))
      ;`;√≈²=`M@░   filter: take if
        ;√≈²=         int(sqrt(x))**2 == x
                 E  get nth element

1

> <>, 108 바이트

:1)?v  >n;
$:@@\&31+2>2$:@@:@
:1=?\@$:@*@@1-
:~$~<.1b+1v!?(}:{:~~v?(}:{:v?=}:{
1-:&1=?v~~>~61.     >~1+b1.>&

이 프로그램을 실행하려면 스택에 입력 번호가 있어야합니다.

낭비되는 바이트 수를 7로 줄이려면 꽤 많은 시간이 걸렸습니다!

입력이인지 확인한 후 1프로그램 n은 4에서 각 숫자 를 차례로 확인하여 완벽한 검정력인지 확인합니다. 로 시작하여이 작업을 수행합니다 a=b=2. 만약a^b == n , 우리는 완벽한 검정력을 찾았으므로, 발견하기 위해 남은 완벽한 검정력의 수를 줄이십시오. 이미 올바른 숫자를 찾았다면 출력하십시오.

경우 a^b < n, b증가합니다. 경우 a^b > n, a증가합니다. 그렇다면, a == n우리는 그것이 n완벽한 힘이 아니라는 것을 알았습니다 . 그래서 n, reset a및을 증가시킵니다 b.


0

J, 29 바이트

@ LegionMammal978의 방법을 기반으로합니다 .

<:{[:/:~@~.[:,/[:(^/>:)~>:@i.

용법

   f =: <:{[:/:~@~.[:,/[:(^/>:)~>:@i.
   f " 0 (1 2 3 4 5 6 7 8 9 10)
1 4 8 9 16 25 27 32 36 49

설명

<:{[:/:~@~.[:,/[:(^/>:)~>:@i.
                           i.  Create range from 0 to n-1
                        >:     Increments each in that range, now is 1 to n
               [:              Cap, Ignores input n
                    >:         New range, increment from previous range to be 2 to n+1 now
                  ^/           Forms table using exponentation between 1..n and 2..n+1
             ,/                Flattens table to a list
         ~.                    Takes only distinct items
     /:~                       Sorts the list
<:                             Decrements the input n (since list is zero-based index)
  {                            Selects value from resulting list at index n-1

0

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

n=>(a=[...Array(n)]).map(_=>a.every(_=>(p=i**++j)>n*n?0:r[p]=p,i+=j=1),r=[i=1])&&r.sort((a,b)=>a-b)[n-1]

n²보다 크지 않은 모든 거듭 제곱을 계산하고 결과 목록을 정렬하고 n 번째 요소를 가져 와서 작동합니다.


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