การแยกตัวประกอบร่วมที่สำคัญสูงสุดร่วมกันสูงสุด


14

คำนิยาม

  • ตัวเลขสองมีร่วมที่สำคัญ1ถ้าหารกันของพวกเขาเท่านั้นในเชิงบวกคือ
  • รายการตัวเลขเป็นค่าร่วมกันระหว่างนายกถ้าทุกคู่ของตัวเลขในรายการนั้นเป็นคู่ร่วมกัน
  • ตัวประกอบของจำนวนนี้เป็นรายการของตัวเลขที่มีสินค้าเป็นnn

งาน

ได้รับเป็นจำนวนบวกnเอาท์พุทตัวประกอบร่วมกันร่วมที่สำคัญของที่มีความยาวสูงสุดที่ไม่รวมn1

ตัวอย่าง

สำหรับn=60คำตอบคือ[3,4,5]เพราะ3*4*5=60และไม่มีการแยกตัวประกอบร่วมที่สำคัญอื่น ๆ โดยไม่มี1ความยาวมากกว่าหรือเท่ากับ3ความยาวของการแยกตัวประกอบ

กฎและเสรีภาพ

  • คุณสามารถใช้รูปแบบอินพุต / เอาท์พุตที่สมเหตุสมผล
  • รายการในรายการเอาท์พุทไม่จำเป็นต้องเรียงลำดับ

Testcases

n   output
1   []
2   [2]
3   [3]
4   [4]
5   [5]
6   [2, 3]
7   [7]
8   [8]
9   [9]
10  [2, 5]
11  [11]
12  [3, 4]
13  [13]
14  [2, 7]
15  [3, 5]
16  [16]
17  [17]
18  [2, 9]
19  [19]
20  [4, 5]
21  [3, 7]
22  [2, 11]
23  [23]
24  [3, 8]
25  [25]
26  [2, 13]
27  [27]
28  [4, 7]
29  [29]
30  [2, 3, 5]
31  [31]
32  [32]
33  [3, 11]
34  [2, 17]
35  [5, 7]
36  [4, 9]
37  [37]
38  [2, 19]
39  [3, 13]
40  [5, 8]
41  [41]
42  [2, 3, 7]
43  [43]
44  [4, 11]
45  [5, 9]
46  [2, 23]
47  [47]
48  [3, 16]
49  [49]
50  [2, 25]
51  [3, 17]
52  [4, 13]
53  [53]
54  [2, 27]
55  [5, 11]
56  [7, 8]
57  [3, 19]
58  [2, 29]
59  [59]
60  [3, 4, 5]
61  [61]
62  [2, 31]
63  [7, 9]
64  [64]
65  [5, 13]
66  [2, 3, 11]
67  [67]
68  [4, 17]
69  [3, 23]
70  [2, 5, 7]
71  [71]
72  [8, 9]
73  [73]
74  [2, 37]
75  [3, 25]
76  [4, 19]
77  [7, 11]
78  [2, 3, 13]
79  [79]
80  [5, 16]
81  [81]
82  [2, 41]
83  [83]
84  [3, 4, 7]
85  [5, 17]
86  [2, 43]
87  [3, 29]
88  [8, 11]
89  [89]
90  [2, 5, 9]
91  [7, 13]
92  [4, 23]
93  [3, 31]
94  [2, 47]
95  [5, 19]
96  [3, 32]
97  [97]
98  [2, 49]
99  [9, 11]

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

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




ความท้าทายในการติดตามที่ยากขึ้น: มีเพียงคู่ที่อยู่ติดกันในรายการผลลัพธ์เท่านั้นที่จะต้องเป็นแบบร่วม
Martin Ender

4
นี่เป็นเพียงการแยกตัวประกอบเป็นพลังพิเศษหรือไม่?
Paŭlo Ebermann

1
@ PaŭloEbermannใช่มันเป็น
Leun Nun

คำตอบ:


10

คณิตศาสตร์ , 24 ไบต์

#^#2&@@@FactorInteger@#&

ลองออนไลน์!


5
#^#2&@@@FactorInteger@#&[1]ผลตอบแทน{1}ใน Mathematica แต่มันใช้งานได้ในวิชาคณิตศาสตร์
alephalpha

@alephalpha ขอบคุณมันจะไม่เกิดขึ้นกับฉันเพื่อดูว่าคณิตศาสตร์ดำเนินการFactorIntegerแตกต่างกัน :)
Martin Ender

9

Brachylogขนาด 4 ไบต์

ḋḅ×ᵐ

ลองออนไลน์!

คำอธิบาย

       # output is the list of
  ×ᵐ   # products of each
 ḅ     # block of consecutive equal elements
ḋ      # of the prime factors
       # of the input

2
ขอแสดงความยินดีกับคำตอบ Brachylog แรกของคุณ! ... อย่างน้อยฉันก็คิดว่า?
ทำให้เสียชีวิต

1
@ สรุป: ครั้งที่สองของฉันฉันคิดว่า ฉันเคยมีอันนี้มาก่อน แน่นอนหนึ่งที่สั้นที่สุดของฉันแม้ว่า :)
Emigna

5

05AB1E , 3 5 ไบต์

2 1ไบต์ในการแก้ไขปัญหากรณีที่ขอบของ ขอบคุณ Riley สำหรับแพทช์ (และสำหรับชุดทดสอบ, 05ab1e ของฉันไม่แข็งแรงขนาดนี้!)

ÒγP1K

ชุดทดสอบที่ลองใช้ออนไลน์!

อย่างไร?

Ò     - prime factorisation, with duplicates
 γ    - split into chunks of consecutive equal elements
  P   - product of each list
   1  - literal one
    K - removed instances of top from previous
      - implicitly display top of stack

@Adnan เป็นลิงค์ที่ดีที่สุดสำหรับ "bytes" หรือมีโค้ดเพจที่จัดรูปแบบไว้ที่ไหน?
Jonathan Allan

ใช่มีหน้ารหัสที่แสดงไบต์ทั้งหมด
Adnan

1
โอ้ฉันจะคิดถึงมันได้อย่างไร> _ <ขอบคุณมาก :)
Jonathan Allan

1ไม่ทำงานสำหรับ
Leun Nun

@LeakyNun แก้ไขความช่วยเหลือแล้ว :)
Jonathan Allan


3

Haskell , 51 ไบต์

(2#) เป็นฟังก์ชั่นที่ไม่ระบุชื่อโดยใช้จำนวนเต็มและส่งคืนรายการ

(2#) 99ใช้เป็น

m#n|m>n=[]|x<-gcd(m^n)n=[x|x>1]++(m+1)#div n x
(2#)

ลองออนไลน์!

แรงบันดาลใจจากอำนาจที่หลอกลวงบางคนนำมาใช้ในเร็ว ๆ นี้ความท้าทายจำนวน squarefree

  • m#nสร้างปัจจัยของnเริ่มต้นด้วยmเริ่มต้นด้วย
  • ถ้า m>nเราหยุดสรุปว่าเราได้พบปัจจัยทั้งหมดแล้ว
  • x=gcd(m^n)nเป็นปัจจัยที่ใหญ่ที่สุดที่nมีปัจจัยสำคัญทั้งหมดเข้าmมา โปรดทราบว่าเนื่องจากmมีการทดสอบขนาดเล็กก่อนสิ่งนี้จะเป็น1เว้นแต่mเป็นสำคัญ
  • เรารวมxอยู่ในรายการที่เกิดขึ้นหากยังไม่ได้ 1 แล้ว recurse กับถัดไปmแบ่งโดยn xโปรดทราบว่าxและdiv n xไม่สามารถมีปัจจัยทั่วไปได้
  • (2#)2ใช้เวลาจำนวนและเริ่มหาปัจจัยมาจาก

3

MATL , 7 ไบต์

&YF^1X-

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย

พิจารณาอินพุต80 เป็นตัวอย่าง

&YF    % Implicit input. Push array of unique prime factors and array of exponents
       % STACK: [2 3 5], [4 0 1]
^      % Power, element-wise
       % STACK: [16 1 5]
1      % Push 1
       % STACK: [16 1 5], 1
X-     % Set difference, keeping order. Implicitly display
       % STACK: [16 5]

แก้ไข (9 มิถุนายน 2017): YFด้วยสองเอาต์พุตได้รับการแก้ไขในรุ่น 20.1.0 : ช่วงเวลาที่ไม่ใช่ปัจจัยและเลขชี้กำลัง (ศูนย์) ของพวกเขาจะถูกข้าม สิ่งนี้จะไม่ส่งผลต่อโค้ดข้างต้นซึ่งใช้งานได้โดยไม่ต้องทำการเปลี่ยนแปลงใด ๆ (แต่1X-สามารถลบออกได้)


ฉันถือว่าการเปลี่ยนแปลงหมายถึง1X-ซ้ำซ้อนในรุ่นใหม่ ... เช่นกันดูเหมือนว่าแตกต่างกันมากกว่าที่จะแยกฉัน
Ørjan Johansen

@ ØrjanJohansenแก้ไขทั้งสองข้อ ขอบคุณ!
Luis Mendo

2

เยลลี่ 5 ไบต์

ÆF*/€

ชุดทดสอบที่ลองใช้ออนไลน์!

อย่างไร?

ÆF*/€ - Main link: n
ÆF    - prime factors as [prime, exponent] pairs
   /€ - reduce €ach with:
  *   - exponentiation

วิธีการแก้ปัญหา 6 ไบต์อื่นในความพยายามที่จะหาวิธีการที่จะผูกกับคุณ (น่าเสียดายที่ความล้มเหลว) ÆfŒgZPอื่น: มีจำนวนโทเค็นเท่ากัน แต่มีอะตอมแบบสองไบต์มากเกินไป)
HyperNeutrino

... และเช่นเดียวกับรายการ 05ab1e ที่ถูกลบของฉันมันจะส่งคืน1สำหรับการป้อนข้อมูล1ที่ไม่ได้รับอนุญาต
Jonathan Allan


2

อลิซ 10 ไบต์

Ifw.n$@EOK

ลองออนไลน์!

แต่น่าเสียดายที่การใช้งานนี้รหัสจุดที่เป็นจำนวนเต็ม I / O อีกครั้ง กรณีทดสอบในลิงค์ TIO คืออินพุต191808ซึ่งสลายตัวเป็น64 , 81และ 37 %Q@โปรดทราบว่าการแก้ปัญหานี้พิมพ์พลังสำคัญในการสั่งซื้อจากที่ใหญ่ที่สุดนายกเล็กที่สุดเราจึงได้รับการส่งออก

เพื่อความสะดวกนี่คือโซลูชัน 16- ไบต์ที่มีทศนิยม I / O ซึ่งใช้อัลกอริทึมหลักเดียวกัน:

/O/\K
\i>fw.n$@E

ลองออนไลน์!

คำอธิบาย

เช่นเดียวกับคำตอบอื่น ๆ สิ่งนี้จะสลายอินพุตให้เป็นมหาอำนาจ

I      Read a code point as input.
f      Compute its prime factorisation a prime/exponent pairs and push them
       to the stack in order from smallest to largest prime.
w      Remember the current IP position on the return address stack. This
       starts a loop.
  .      Duplicate the current exponent. This will be zero once all primes
         have been processed.
  n$@    Terminate the program if this was zero.
  E      Raise the prime to its corresponding power.
  O      Output the result as a character.
K      Return to the w to run the next loop iteration.

2

mathematica 46 ไบต์

#[[1]]^#[[2]]&/@If[#==1,#={},FactorInteger@#]&

ลองออนไลน์!


คำตอบที่ดี แต่มันให้ผลลัพธ์ที่ไม่ถูกต้องเล็กน้อยสำหรับบางกรณีทดสอบ ขณะนี้โค้ดของคุณจะออกมา {}; {2}; {3}; {2}; {5}; {2,3}; {7}; {2}; {3}; {2,5}; {11}; {2,3}; {13}; ...แต่มันควรจะออกมา{}; {2}; {3}; {4}; {5}; {2,3}; {7}; {8}; {9}; {2,5}; {11}; {4,3}; {13}; ...แทน
Kevin Cruijssen

ฉันคิดว่าฉันซ่อมมัน
J42161217

ดูเหมือนว่าจะทำงานในTIOแน่นอน +1 โอ้และยินดีต้อนรับสู่ PPCG ฉันเห็นว่าคุณค่อนข้างใหม่ที่นี่ คุณอาจเคยเห็นมันมาแล้ว แต่ถ้าไม่ได้คำแนะนำสำหรับการเล่นกอล์ฟใน Mathematicaอาจเป็นเรื่องที่น่าสนใจสำหรับการอ่าน เพลิดเพลินไปกับการพักผ่อนของคุณ! :)
Kevin Cruijssen

1
หากคุณพบว่าคุณเข้าถึงองค์ประกอบ#มากกว่า#ตัวคุณเองคุณสามารถบันทึกจำนวนมากโดยใช้Apply( @@@) แทน( ) แทนMap( /@):#^#2&@@@If...
Martin Ender

1

PHP, 62 ไบต์

พิมพ์อาเรย์แบบเชื่อมโยงโดยใช้ไพรม์เป็นคีย์และความถี่ที่นายกใช้เป็นค่าและไม่มีอะไรให้ป้อนข้อมูล 1

for($i=2;1<$n=&$argn;)$n%$i?++$i:$n/=$i+!++$r[$i];print_r($r);

ลองออนไลน์!

ผลผลิตสำหรับ 60

Array
(
    [2] => 2
    [3] => 1
    [5] => 1
)

PHP, 82 ไบต์

for($i=2;1<$n=&$argn;)$n%$i?++$i:$n/=$i+!($r[$i]=$r[$i]?$r[$i]*$i:$i);print_r($r);

ลองออนไลน์!

พิมพ์สิ่งใดสำหรับการป้อนข้อมูล1ถ้าคุณต้องการอาร์เรย์ที่ว่างเปล่าแทนและอาร์เรย์ที่เรียงลำดับจะยาวขึ้นอีกเล็กน้อย

for($r=[],$i=2;1<$n=&$argn;)$n%$i?++$i:$n/=$i+!($r[$i]=$r[$i]?$r[$i]*$i:$i);sort($r);print_r($r);



0

miniML , 47 ไบต์

ความท้าทายที่เกี่ยวข้องกับการแยกตัวประกอบเฉพาะเป็นสิ่งสำคัญมากที่นี่ดังนั้นเราทุกคนจึงถูกบังคับให้ต้องแยกตัวประกอบในไลบรารีมาตรฐาน

fun n->map(fun p->ipow(fst p)(snd p))(factor n)

โปรดทราบว่า 'mini' ใน miniml หมายถึงขนาดของชุดคุณสมบัติไม่ใช่ขนาดของซอร์สโค้ดที่เขียนอยู่


0

ทับทิม 61 ไบต์

require 'prime'
->n{(2..n).select{|e|n/e.to_f%1==0&&e.prime?}}

ฉันผิดหวังจริงๆหลังจากดูโซลูชั่น 6-7 ไบต์ -))


0

Mathematica ขนาด 24 ไบต์

Power@@@FactorInteger@#&

เลวร้ายเกินไป@@@*ไม่ใช่เรื่อง นอกจากนี้ผมต้องการ/@*, @@*และในความเป็นจริงการเปลี่ยนแปลง@@@ไป/@@, //@ไป@@@หรืออะไรก็ตามและเพิ่มครอบครัวอนันต์//@, ///@...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.