ค้นหาพลังที่สมบูรณ์แบบ n-th!


16

อำนาจที่สมบูรณ์แบบเป็นจำนวนของรูปแบบa**bที่และa>0b>1

ยกตัวอย่างเช่นเป็นพลังงานที่สมบูรณ์แบบเพราะมันสามารถแสดงเป็น1255**3

เป้าหมาย

งานของคุณคือการเขียนโปรแกรม / ฟังก์ชั่นที่พบว่าnพลังงานที่สมบูรณ์แบบ -th nให้เป็นจำนวนเต็มบวก

รายละเอียด

  • พลังที่สมบูรณ์แบบครั้งแรกคือ1(ซึ่งก็คือ1**2)
  • อินพุต / เอาต์พุตในรูปแบบที่เหมาะสม
  • Built-in จะได้รับอนุญาต

ข้อมูลเพิ่มเติม

เกณฑ์การให้คะแนน

นี่คือรหัสกอล์ฟทางออกที่สั้นที่สุดในหน่วยไบต์ชนะ

Testcases

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

ในปริมาณที่เหมาะสม
Leun Nun

แล้วภาษาที่ใช้เพียงแค่ชนิดข้อมูลหนึ่งบิต?
ghosts_in_the_code

1
@ Agawa001 ใช่มันเป็นช่องโหว่มาตรฐานที่ไม่ตลกอีกต่อไป
ข้อบกพร่อง

คำตอบ:


8

เยลลี่ 11 ไบต์

µÆE;¬g/’µ#Ṫ

ลองออนไลน์! .

พื้นหลัง

ทุกจำนวนเต็มบวกkสามารถ factorized ไม่ซ้ำกันเป็นผลิตภัณฑ์ของอำนาจของแรกเมตรจำนวนเฉพาะคือk p = 1 α 1 ⋯พีเมตรα เมตรที่α > 0

เรามีที่ ( b> 1 ) บวกจำนวนเต็มบางถ้าหากเป็นตัวหารของเลขยกกำลังทั้งหมดαเจ

ดังนั้นจำนวนเต็มk> 1เป็นพลังงานที่สมบูรณ์แบบและถ้าหากGCD (α 1 , ⋯, α เมตร ) ≠ 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 เลย ฉันไม่รู้ว่าจะใช้ยังไง
Leun Nun

ใช้คำจำกัดความของพลังที่สมบูรณ์แบบที่เกี่ยวข้องกับการแยกตัวประกอบเฉพาะ คุณสามารถรวมอัลกอริทึมนี้ในคำอธิบายได้หรือไม่?
Leun Nun

@KennyLau เรียบร้อยแล้ว
Dennis

ฉันไม่เข้าใจว่า 21 ^ 2 รวมนายกคนแรกหรือตัวที่สามในการแยกตัวประกอบอย่างไร คุณช่วยฉันเข้าใจว่าคุณหมายถึงอะไรโดย "จำนวนเต็มบวก k ทุกตัวสามารถแยกตัวประกอบได้อย่างมีเอกลักษณ์โดยเป็นผลคูณของพลังของช่วงเวลาแรกของม. ... ที่ [เลขชี้กำลัง] a_n > 0? ดูเหมือนว่าในการแยกตัวประกอบสำหรับ 21 ^ 2 เลขชี้กำลังสำหรับ p = 2 และ p = 5 เป็นศูนย์
גלעדברקן

@ גלעדברקןขออภัยที่ควรได้รับÃ_m> 0 เลขยกกำลังm-1ก่อนหน้านี้อาจรวมศูนย์
Dennis

6

Mathematica, 34 ไบต์

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

สร้างn × nอาร์เรย์IJ = ฉัน1+ J , flattens มันและผลตอบแทนn TH องค์ประกอบ


3

CJam, 16 ไบต์

ri_),_2f+ff#:|$=

ทดสอบที่นี่

คำอธิบาย

สิ่งนี้ใช้แนวคิดคล้ายกันกับคำตอบ Mathematica ของ 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

อ็อกเทฟ, 57 31 30 ไบต์

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

ฉันเพิ่งสังเกตเห็นอีกครั้งว่า Octave ไม่ต้องการ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ขอบคุณเดนนิส

เป็นเรื่องสนุกจริง ๆ : 0เป็นพลังที่สมบูรณ์แบบตามมาตรฐานของ Sage โชคดีเพราะ1เป็นองค์ประกอบที่ 1 ของรายการไม่ใช่ 0th :)


ดังนั้นนี่คือ Python ยกเว้นส่วนพลังพิเศษ?
CalculatorFeline

@CatsAreFluffy และis_perfect_power()
yo '

2

Pyth - 12 11 ไบต์

วิธีการที่ชัดเจนเพิ่งผ่านไปและตรวจสอบตัวเลขทั้งหมด

e.ffsI@ZTr2

Test Suite



1

Julia, 64 32 ไบต์

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

นี่เป็นฟังก์ชั่นนิรนามที่รับจำนวนเต็มและคืนค่าจำนวนเต็ม หากต้องการเรียกใช้กำหนดค่าให้กับตัวแปร

ความคิดที่นี่เป็นเช่นเดียวกับใน LegionMammal ของ Mathematica คำตอบ : เราใช้ผลิตภัณฑ์ที่ด้านนอกของเลข 1 ถึงn 2 ถึงn + 1, ยุบเมทริกซ์ที่เกิดคอลัมน์ฉลาดใช้องค์ประกอบที่ไม่ซ้ำเรียงลำดับและได้รับn THองค์ประกอบ .

ลองออนไลน์! (รวมถึงกรณีทดสอบทั้งหมด)


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

น้อย golfed

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การรีเซ็ตและab


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

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