Tìm sức mạnh hoàn hảo thứ n!


16

Một sức mạnh hoàn hảo là một số hình thức a**b, ở đâu a>0b>1.

Ví dụ, 125là một sức mạnh hoàn hảo bởi vì nó có thể được thể hiện như 5**3.

Mục tiêu

Nhiệm vụ của bạn là viết một chương trình / hàm tìm thấy nsức mạnh hoàn hảo thứ, với một số nguyên dương n.

Thông số kỹ thuật

  • Sức mạnh hoàn hảo đầu tiên là 1(đó là 1**2).
  • Đầu vào / đầu ra trong bất kỳ định dạng hợp lý.
  • Xây dựng được cho phép .

Thêm thông tin

Chấm điểm

Đây là . Giải pháp ngắn nhất trong byte thắng.

Tủ thử

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

1
Uptil số này nên làm việc gì? Vô cực?
ghosts_in_the_code

Một số tiền hợp lý.
Leaky Nun

Còn một ngôn ngữ chỉ sử dụng loại dữ liệu một bit thì sao?
ghosts_in_the_code

1
@ Agawa001 Vâng, đó là một lỗ hổng tiêu chuẩn không còn hài hước nữa.
flawr

Câu trả lời:


8

Thạch , 11 byte

µÆE;¬g/’µ#Ṫ

Hãy thử trực tuyến! .

Lý lịch

Mọi số nguyên dương k có thể được nhân tố duy nhất là tích số lũy thừa của các số nguyên tố m đầu tiên , nghĩa là k = p 1 α 1 ⋯ p m α m , trong đó α m > 0 .

Chúng tôi có mà một b ( b> 1 ) đối với một số nguyên dương một khi và chỉ khi b là ước của tất cả các số mũ α j .

Do đó, một số nguyên k> 1 là một công suất hoàn hảo khi và chỉ khi gcd (α 1 , ⋯, α m ) 1 .

Làm thế nào nó hoạt động

µÆ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.

Tôi chưa thấy STDIN cả. Tôi không có ý tưởng làm thế nào để sử dụng nó cả.
Leaky Nun

Sử dụng tốt định nghĩa của sức mạnh hoàn hảo phải làm với yếu tố chính. Bạn có thể bao gồm thuật toán này trong mô tả?
Leaky Nun

@KennyLau Xong.
Dennis

Tôi không hiểu làm thế nào 21 ^ 2 bao gồm nguyên tố thứ nhất hoặc thứ ba trong nhân tố của nó. Bạn có thể vui lòng giúp tôi hiểu ý của bạn bằng cách "Mọi số nguyên dương k có thể được nhân tố duy nhất là sản phẩm của quyền hạn của các số nguyên tố m đầu tiên ... trong đó [số mũ] a_n > 0?" Dường như với tôi trong hệ số nhân cho 21 ^ 2 số mũ của p = 2 và p = 5 bằng không.
גלעד ברקן

@ גלעדב ž קן Xin lỗi, đó phải là a_m> 0 . Các số mũ m-1 trước đó có thể bao gồm các số 0.
Dennis

6

Toán học, 34 byte

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

Tạo ra một n × n mảng A ij = i 1+ j , flattens nó, và trả về n th phần tử.


3

CJam, 16 byte

ri_),_2f+ff#:|$=

Kiểm tra nó ở đây.

Giải trình

Điều này sử dụng một ý tưởng tương tự như câu trả lời Mathicala của LegionMammal.

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

Octave, 57 31 30 byte

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

Tôi chỉ nhận thấy một lần nữa rằng Octave không cần ndgrid(trong khi Matlab thì) =)



3

Sage (phiên bản 6.4, có lẽ cũng là những người khác): 64 63

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

Tạo một hàm lambda trả lại nsức mạnh hoàn hảo. Chúng tôi dựa vào thực tế là nó được tìm thấy trong các n^2số nguyên đầu tiên . ( 1+n^2Cần thiết cho n=1,2. 0+kBit là cần thiết để chuyển đổi int(k)thành Integer(k).)

Byte tắt cho xrange->range , cảm ơn Dennis.

Chỉ là một sự thật thú vị: 0là một sức mạnh hoàn hảo theo tiêu chuẩn của Sage, may mắn thay, bởi vì đó 1là yếu tố đầu tiên của danh sách, không phải thứ 0 :)


Vì vậy, đây là Python ngoại trừ phần sức mạnh chính?
Máy

@CatsAreFluffy Vàis_perfect_power()
yo '


1

MATL, 9 byte

:tQ!^uSG)

Dùng thử trực tuyến

Đây là một cổng của giải pháp Octave của Flawr cho MATL, tạo ra ma trận sức mạnh n^(n+1)và đạt được nthứ thứ nhất.


1

Julia, 64 32 byte

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

Đây là một hàm ẩn danh chấp nhận một số nguyên và trả về một số nguyên. Để gọi nó, gán nó cho một biến.

Ý tưởng ở đây giống như trong Mathicala của LegionMammal câu trả lời : Chúng tôi lấy sản phẩm bên ngoài của các số nguyên 1 đến n với 2 đến n + 1, thu gọn cột ma trận kết quả, lấy các phần tử duy nhất, sắp xếp và lấy phần tử thứ n .

Hãy thử trực tuyến! (bao gồm tất cả các trường hợp thử nghiệm)


1

JavaScript (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

Ít chơi gôn

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];
}

Kiểm tra

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

Trên thực tế, 18 byte (không cạnh tranh)

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

Hãy thử trực tuyến!(có thể không hoạt động do cần cập nhật)

Giải pháp này không cạnh tranh vì tôi đã sửa một lỗi với E sau khi thử thách này được đăng.

Giải trình:

;;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 byte

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

Chương trình này yêu cầu số đầu vào phải có mặt trên ngăn xếp trước khi chạy.

Phải mất khá nhiều để giảm số byte bị lãng phí xuống còn 7!

Sau khi kiểm tra xem đầu vào có phải không 1, chương trình sẽ kiểm tra từng số n, từ 4 lần lượt để xem đó có phải là một công suất hoàn hảo hay không. Nó làm điều này bằng cách bắt đầu với a=b=2. Nếu a^b == n, chúng tôi đã tìm thấy một sức mạnh hoàn hảo, vì vậy hãy giảm số lượng sức mạnh hoàn hảo còn lại để tìm - nếu chúng tôi đã tìm đúng số lượng, sản lượng.

Nếu a^b < n, bđược tăng lên. Nếu a^b > n, ađược tăng lên. Sau đó, nếu a == n, chúng tôi thấy rằng đó nkhông phải là một sức mạnh hoàn hảo, vì vậy n, tăng , đặt lại ab.


0

J, 29 byte

Dựa trên phương pháp của @ LegionMammal978 .

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

Sử dụng

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

Giải trình

<:{[:/:~@~.[:,/[:(^/>:)~>:@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

JavaScript (ES7), 104 byte

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]

Hoạt động bằng cách tính toán tất cả các quyền hạn không lớn hơn n², sắp xếp danh sách kết quả và lấy phần tử thứ n.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.