ละทิ้งพื้นที่สี่เหลี่ยมทั้งหมดเจ้าผู้แบ่งเรา


37

คำนิยาม

  • ตารางที่สมบูรณ์เป็นจำนวนเต็มซึ่งสามารถแสดงเป็นตารางของจำนวนเต็มอีก ยกตัวอย่างเช่นเป็นตารางที่สมบูรณ์เพราะ366^2 = 36
  • จำนวน squarefreeเป็นจำนวนเต็มซึ่งไม่หารด้วยตารางที่สมบูรณ์ใด ๆ 1ยกเว้นโดย ตัวอย่างเช่น10เป็นหมายเลข squarefree อย่างไรก็ตาม12ไม่ใช่หมายเลข squarefree เนื่องจาก12หารด้วย4และ4เป็นรูปสี่เหลี่ยมจัตุรัสที่สมบูรณ์แบบ

งาน

ป.ร. ให้ไว้เป็นจำนวนเต็มบวกnการส่งออกจำนวน squarefree nใหญ่ที่สุดซึ่งแบ่ง

Testcases

n   output
1   1
2   2
3   3
4   2
5   5
6   6
7   7
8   2
9   3
10  10
11  11
12  6
13  13
14  14
15  15
16  2
17  17
18  6
19  19
20  10
21  21
22  22
23  23
24  6
25  5
26  26
27  3
28  14
29  29
30  30
31  31
32  2
33  33
34  34
35  35
36  6
37  37
38  38
39  39
40  10
41  41
42  42
43  43
44  22
45  15
46  46
47  47
48  6
49  7
50  10

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

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

ช่องโหว่มาตรฐานใช้

การอ้างอิง


1
... และถูกเรียกว่าราก - ดังนั้น 1980
Jonathan Allan

สัมพันธ์กันอย่างใกล้ชิดเพียงแค่คูณสองเอาต์พุต แก้ไข: ไม่เป็นไรมันตรงกับหมายเลข cubefree เท่านั้น
xnor

คำตอบ:


45

05AB1E , 2 ไบต์

fP

ลองออนไลน์!

มันทำงานอย่างไร

f   Implicitly take input and compute the integer's unique prime factors.
 P  Take the product.

26
> _> จริงๆ ... ??
HyperNeutrino

@HyperNeutrino yep - หากจำนวนไม่ได้เป็นแบบไม่ต้องเป็นรูปสี่เหลี่ยมก็เป็นเพราะบางส่วนของปัจจัยสำคัญมีหลายหลาก
Jonathan Allan

@JanathanAllan ฉันแค่สนใจในตัวสำหรับปัจจัยสำคัญเฉพาะ ฉันหวังว่าเจลลี่จะมีหนึ่งในนั้น ...
HyperNeutrino

@HyperNeutrino มันเป็น 05AB1E และชินกับมัน 05AB1E มี builtins ที่ซ้ำซ้อนจริง ๆ บางตัวที่บันทึกไบต์
Erik the Outgolfer

6
การแก้ไข "บันทึกไบต์" ไม่น่าจะเกี่ยวกับมัน
Draco18s

14

Brachylogขนาด 3 ไบต์

ḋd×

ลองออนไลน์!

คำตอบที่เป็นต้นฉบับมาก ...

คำอธิบาย

ḋ          Take the prime factors of the Input
 d         Remove duplicates
  ×        Multiply

1
อีกครั้ง Brachylog เต้น Jelly เพราะอะตอมสองไบต์เป็นเพียงหนึ่งไบต์ที่นี่ > :-P
HyperNeutrino

4
เจลลี่ที่มีบิวด์อินจำนวนมากมักถูกมองว่าเป็นข้อได้เปรียบ แต่ในตัวมากขึ้นหมายความว่าพวกเขาต้องการชื่อโดยเฉลี่ยอีกต่อไป ดังนั้นจึงมีการแลกเปลี่ยนในการออกแบบภาษากอล์ฟ

2
ฉันไม่ได้พยายามที่จะ "คนที่แต่งตัวประหลาด" และบางทีฉันแค่เข้าใจผิดนับไบต์ แต่ไม่ได้ 6 ไบต์นี้? mothereff.in/byte-counter#ḋd ×
กัปตันผู้ชาย

5
@CaptainMan Brachylog ใช้หน้ารหัส 256 ตัวอักษรที่กำหนดเองที่คุณสามารถหาได้ที่นี่
ทำให้เสียชีวิต

14

JavaScript (ES6), 55 54 50 46 ไบต์

การอ้างอิงOEIS :
a (n) คือตัวหารที่เล็กที่สุดของ n ซึ่ง n หาร n ^ u

การใช้งานที่อัปเดต:
a (n) คือตัวหารที่เล็กที่สุดของ nจำนวนเต็มบวก u ซึ่ง n หาร n ^ u

let f =

n=>(g=(p,i=n)=>i--?g(p*p%n,i):p?g(++u):u)(u=1)

for(n = 1; n <= 50; n++) {
  console.log(n,f(n));
}


วิธีการที่ดีในการแก้ปัญหาโดยเฉพาะอย่างยิ่ง รับการขาดตัวประกอบในตัว
Riking

12

MATL , 6 4 ไบต์

บันทึก 2 ไบต์ด้วยความช่วยเหลือจาก @LeakyNun

Yfup

ลองออนไลน์!

คำอธิบาย

48พิจารณาการป้อนข้อมูล

Yf   % Implicit input. Push prime factors with repetitions.  STACK: [2 2 2 2 3]
u    % Unique.                                               STACK: [2 3]
p    % Product of array. Implicit display.                   STACK: 6


@LeakyNun Heh ฉันกำลังจะโพสต์ :-) ขอบคุณ
Luis Mendo


9

CJam , 8 ไบต์

rimf_&:*

เหตุใดการดำเนินการทุกอย่างในโปรแกรมนี้จึงต้องเป็น 2 ไบต์ -_-

ลองออนไลน์!

ri       e# Read int from input
  mf     e# Get the prime factors
    _&   e# Deduplicate
      :* e# Take the product of the list

ฉันไม่สามารถหาวิธีขจัดความซ้ำซ้อนได้ ดี!
Luis Mendo

@ LuisMendo ฉันเพิ่งค้นพบว่าเมื่อเร็ว ๆ นี้ ฉันมักจะคิดว่ามันเป็นจุดตัดหลายชุด แต่เห็นได้ชัดว่าเป็นเพียงจุดตัดชุดปกติ
ธุรกิจ Cat

9

Retina , 36 30 28 ไบต์

+`((^|\3)(^(1+?)|\3\4))+$
$3

เข้าและส่งออกในเอก

ลองออนไลน์! (รวมส่วนหัวและส่วนท้ายสำหรับการแปลงค่าทศนิยม <-> unary และเรียกใช้กรณีทดสอบหลายรายการพร้อมกัน)

คำอธิบาย

แนวคิดคือการจับคู่อินพุตให้เป็นสี่เหลี่ยมจัตุรัสคูณปัจจัยบางอย่าง regex พื้นฐานสำหรับการจับคู่สี่เหลี่ยมใช้การอ้างอิงไปข้างหน้าเพื่อจับคู่ผลรวมของจำนวนเต็มคี่ที่ต่อเนื่องกัน:

(^1|11\1)+$

เนื่องจากเราไม่ต้องการจับคู่กำลังสองที่สมบูรณ์แบบ แต่ตัวเลขที่หารด้วยสี่เหลี่ยมได้เราจึงแทนที่1ด้วยการย้อนกลับ:

(^(1+?)|\1\2\2)+$

ดังนั้นตอนนี้กลุ่มด้านนอก1จะถูกใช้nครั้งโดยที่n 2เป็นสี่เหลี่ยมจัตุรัสที่ใหญ่ที่สุดซึ่งแบ่งอินพุตและกลุ่ม2เก็บปัจจัยที่เหลือ สิ่งที่เราต้องการคือการหารจำนวนเต็มด้วยnเพื่อลบสแควร์ ผลลัพธ์สามารถแสดงเป็นจำนวนการวนซ้ำของกลุ่ม1คูณกลุ่ม2แต่นี่เป็นเรื่องยากที่จะทำ Retina $*อาจจะได้รับการปรับปรุงให้ใช้โทเค็นที่ไม่ใช่ตัวละครเป็นอาร์กิวเมนต์ด้านขวาซึ่งในกรณีนี้เราสามารถแทนที่สิ่งนี้ด้วย$#1$*$2แต่ก็ยังไม่สามารถใช้งานได้

แต่เราสลายเลขคี่แตกต่างกัน (^1|11\1)+$ลองกลับไปที่ตัวอย่างที่เรียบง่ายของสี่เหลี่ยมจับคู่ที่สมบูรณ์แบบด้วย แทนที่จะมีตัวนับ\1ซึ่งเริ่มต้นได้ที่1และเพิ่มขึ้นทีละ2ในการวนซ้ำแต่ละครั้งเราจะมีตัวนับสองตัว หนึ่งถูกกำหนดค่าเริ่มต้นเป็น0และหนึ่งถูกเตรียมใช้งานเป็น1และพวกเขาทั้งสองเพิ่มขึ้น1ในแต่ละการทำซ้ำ ดังนั้นเราจึงได้สลายพื้นเลขคี่2n + 1เข้า(n) + (n + 1) ประโยชน์คือการที่เราจะจบลงด้วยnในหนึ่งในกลุ่ม ในรูปแบบที่ง่ายที่สุดซึ่งมีลักษณะดังนี้:

((^|1\2)(^1|1\3))+$

ที่ไหน\2เป็นnและ\3เป็น1 + n อย่างไรก็ตามเราสามารถทำสิ่งนี้ได้อย่างมีประสิทธิภาพมากขึ้นโดยสังเกตว่าn + 1ของหนึ่งการทำซ้ำเท่ากับnของการทำซ้ำครั้งถัดไปดังนั้นเราจึงสามารถประหยัดได้1ที่นี่:

((^|\3)(^1|1\3))+$

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

((^|\3)(^(1+?)|\3\4))+$

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

สิ่งนี้จะทำซ้ำ ๆ กัน+ในช่วงเริ่มต้นของโปรแกรมเพื่อพิจารณาอินพุตที่มีพลังสูงกว่ากำลังสอง


8

ระดับเสียงคู่, 27 ไบต์

@(x)prod(unique(factor(x)))

วิธีการที่คล้ายกันเช่นเดียวกับคำตอบอื่น ๆ ความแตกต่างคือ: ฟังก์ชั่นมีชื่ออีกต่อไป ผมเชื่อว่ารหัสอธิบายตัวเองจริงๆ: ใช้เวลาprodUCT ของuniqueสำคัญfactorของตัวเลข


คุณ ninja'd ฉันโดย ~ 30 วินาที :)
Kritixi Lithos


7

ภาษา Wolfram, 29 28 ไบต์

-1 ต้องขอบคุณ@Martin Ender ♦

Most[1##&@@FactorInteger@#]&

คำอธิบาย:

           FactorInteger@#    (*Get prime factorization as {{a,b},{c,d}}*)
     1##&@@                   (*Multiply list elements together, to get the product of the factors and the product of their exponents*)
Most[                     ]&  (*Take the first element*)

2
เพิ่งรู้ว่านี่เป็นความคิดเห็น @ GregMartin โดยทั่วไปในคำตอบของ Mathics มีเพียงนักกอล์ฟน้อยกว่า ...
Scott Milner

อย่ารู้สึกแย่ฉันได้คำตอบที่ไม่ค่อยดีนักTimes@@(#&@@@FactorInteger@#)&
เอียนมิลเลอร์

Mostปล่อยให้เป็นรายการ คุณต้องFirstได้รับความคุ้มค่า
เอียนมิลเลอร์

@IanMiller ฉันรู้ว่า แต่มันน้อยกว่าที่จะเพียงแค่ส่งคืนรายการที่มีองค์ประกอบเดียวเท่านั้น ฉันคิดว่ามันก็โอเคเพราะมันยังคงเป็นผลลัพธ์ที่สมเหตุสมผล
Scott Milner

7

Pythonขนาด 37 ไบต์

f=lambda n,r=1:1>>r**n%n or-~f(n,r+1)

ลองออนไลน์!

ตัวหาร squarefree ที่ใหญ่ที่สุดnคือจำนวนที่น้อยที่สุดrพร้อมด้วยnปัจจัยสำคัญทั้งหมด เราสามารถตรวจสอบสิ่งนี้ได้r**n%n==0เนื่องจากr**nทำnสำเนาของตัวประกอบสำคัญแต่ละตัวrและหารได้ด้วยnก็ต่อเมื่อnมีการแสดงปัจจัยหลักแต่ละตัว

เทียบเท่ากับ1>>r**n%n int(r**n%n==0)หากTrueสามารถใช้เอาต์พุต 1 มันจะสั้นลง 2 ไบต์

f=lambda n,r=1:r**n%n<1or-~f(n,r+1)

6

Mathics , 40 ไบต์

Times@@(Transpose@FactorInteger@#)[[1]]&

ลองออนไลน์!


Times@@#&@@Transpose@FactorInteger@#&บันทึก 3 ไบต์ ( #&@@เป็นเคล็ดลับมาตรฐานสำหรับ[[1]]และในกรณีเช่นนี้มันมักจะสามารถบันทึกไบต์พิเศษบางอย่างไว้ในวงเล็บ)
Martin Ender

นอกจากนี้คุณยังสามารถใช้แทนThread Transposeใน Mathematica มีโอเปอเรเตอร์ 3 ไบต์ให้Transposeด้วย แต่ฉันไม่รู้ว่า Mathics รองรับหรือไม่
Martin Ender

6
#&@@(1##&@@FactorInteger@#)&หลีกเลี่ยงความต้องการTransposeทั้งหมด ( 1##&@@เป็นเพียงTimes@@ในการปลอมตัวซึ่งทำงานที่ดีในการจับคู่คำสั่งให้ยอมแพ้โดยFactorIntegerและ'#&@@เป็นFirst@ในการปลอมตัว.)
เกร็กมาร์ติน

@ GregMartin นั้นเป็นวิธีแก้ปัญหาของคุณเองอย่าลังเลที่จะโพสต์ถ้าคุณต้องการ
Pavel

ดูเหมือนว่าสกอตต์มิลเนอร์ได้เลยล่ะค่ะ :)
เกร็กมาร์ติน

5

อลิซ 4 ไบต์

iDo@

ลองออนไลน์!

อินพุตและเอาต์พุตถูกกำหนดเป็นจุดโค้ดของอักขระ (ใช้ได้กับคะแนนโค้ด Unicode ที่ถูกต้องทั้งหมด)

คำอธิบาย

อลิซมีความสามารถในตัวDที่มีคำจำกัดความว่า "ซ้ำซ้อนกับปัจจัยสำคัญ" นั่นคือตราบใดที่มีค่าคือหารด้วยบางพี2สำหรับนายกพีหารว่าค่าโดยพี นี่เป็นฟังก์ชั่นที่ต้องการในการท้าทายนี้ ส่วนที่เหลือเป็นเพียงอินพุตเอาต์พุตยกเลิกโปรแกรม

เหตุผลที่เพิ่มใน Alice จริง ๆ ไม่มีอะไรเกี่ยวข้องกับลำดับจำนวนเต็มนี้ ฉันพยายามที่จะยึดติดกับธีมของการเชื่อมโยงตัวหารกับสตริงย่อยและปัจจัยสำคัญกับตัวละคร และฉันต้องการฟังก์ชั่นที่ใช้กับ "deduplicate characters" (ซึ่งมีประโยชน์มากกว่าโดยทั่วไปเพราะมันช่วยให้คุณจัดการสตริงเป็นเซตโดยเฉพาะเมื่อใช้ร่วมกับโอเปอเรเตอร์หลายชุด)


ส่วนที่น่าเศร้าคือถึงแม้จะมี builtin แล้ว แต่ก็ไม่ใช่คำตอบที่สั้นที่สุด
Rɪᴋᴇʀ

@Riker นั่นเป็นเพราะอลิซไม่ใช่ภาษากอล์ฟดังนั้นมันจึงต้องการ I / O ที่ชัดเจนและ (เนื่องจากเป็นภาษา 2D)
Martin Ender

ใช่ยังค่อนข้างเศร้าแม้ว่า
Rɪᴋᴇʀ

@ ConorO'Brien เราเพิ่งมีการสนทนานี้ที่อื่นและที่ถูกต้องเท่านั้นหากผู้ประกอบการแบบสแตนด์อโลนเป็นนิพจน์ที่ประเมินฟังก์ชั่น (ซึ่งไม่ใช่กรณีที่นี่เนื่องจากฟังก์ชั่น / ผู้ประกอบการไม่ได้ค่าชั้นแรก) . codegolf.meta.stackexchange.com/a/7206/8478
Martin Ender

@ ConorO'Brien ขออภัยนั่นเป็นพิเศษ "เรา"
Martin Ender





1

Pyth, 8 6 ไบต์

*F+1{P

* -2 ไบต์ขอบคุณ @LeakyNun

น่าจะเป็น 3 ถ้า Pyth มีผลิตภัณฑ์ในรายการ ...

ลองมัน!

*F+1{P
      Q     # Implicit input
     P      # Prime factors of the input
    {       # Deduplicate
  +1        # Prepend 1 to the list (for the case Q==1)
*F          # Fold * over the list

คุณสามารถใช้*F+1{Pแทน
Leun Nun

1

C, 65 50 ไบต์

ขอบคุณ @ Ørjan Johansen ที่ลบความต้องการrออกไป ขอบคุณสิ่งนี้และลูกเล่นสกปรกอื่น ๆ ที่ทำให้ฉันสามารถบีบออกได้ 15 ไบต์!

d;f(n){for(d=1;d++<n;)n%(d*d)||(n/=d--);return n;}

whileหายไปและถูกแทนที่ด้วย||และดัชนีทวีคูณ <=ควรได้รับ<ตลอด

<=หันไป<โดยการย้ายที่เพิ่มขึ้นที่จะได้รับn%(++d*d)(ควรจะกำหนดไว้อย่างดีเนื่องจากความสำคัญของผู้ประกอบการ)


รหัสเดิม:

d;r;f(n){for(r=d=1;d++<=n;)while(n%d<1)r*=r%d?d:1,n/=d;return r;}

ฉันคิดว่าคุณสามารถลดได้โดยการถอดและแทนที่จะใช้r while(n%(d*d)<1)n/=d;
Ørjan Johansen

@ ØrjanJohansenดูเหมือนว่าถูกต้อง ฉันคิดว่าการก่อสร้างแทนที่จะลดลง ฉันมีการปรับปรุงเพิ่มเติมเพื่อเพิ่มจะอัปเดตในไม่ช้า
algmyr

++d*dเป็นอย่างที่ไม่ได้กำหนดไว้อย่างดีตามมาตรฐานของซี - มันเป็นกรณีคลาสสิกของพฤติกรรมที่ไม่ได้กำหนดไว้อย่างชัดเจน แต่เราจะดำเนินการตามขั้นตอนที่นี่
Ørjan Johansen

ที่จริงแล้วไม่ควรd++<nกำหนดว่าอะไรดี ฉันคิดว่าเวอร์ชั่นเก่าไปตลอดทางจนถึงn+1(ไม่เป็นอันตราย)
Ørjan Johansen

คุณอาจถูกต้องเกี่ยวกับพฤติกรรมที่ไม่ได้กำหนด ด้วยเหตุผลบางอย่างฉันคิดว่าลำดับความสำคัญของผู้ให้บริการจะแก้ปัญหานั้นได้ ตัวอย่างส่วนใหญ่ที่ฉันเห็นใน UB ใช้ตัวดำเนินการที่มีลำดับความสำคัญเท่ากัน แต่แน่นอนว่ามีการแข่งขันข้อมูลที่นี่เช่นกัน คุณยังd++<nถูกต้องเกี่ยวกับความถูกต้องด้วยเหตุผลบางอย่างที่ฉันไม่เห็นว่าเมื่อฉันเขียนรหัสใหม่
algmyr

0

ความจริง 89 ไบต์

f(x:PI):PI==(x=1=>1;g:=factor x;reduce(*,[nthFactor(g,i) for i in 1..numberOfFactors g]))

การทดสอบและผลลัพธ์

(38) -> [[i, f(i)] for i in 1..30 ]
   (38)
   [[1,1], [2,2], [3,3], [4,2], [5,5], [6,6], [7,7], [8,2], [9,3], [10,10],
    [11,11], [12,6], [13,13], [14,14], [15,15], [16,2], [17,17], [18,6],
    [19,19], [20,10], [21,21], [22,22], [23,23], [24,6], [25,5], [26,26],
    [27,3], [28,14], [29,29], [30,30]]

นี่คือฟังก์ชั่นหนึ่งที่ไม่ได้ใช้ factor ()

g(x:PI):PI==(w:=sqrt(x);r:=i:=1;repeat(i:=i+1;i>w or x<2=>break;x rem i=0=>(r:=r*i;repeat(x rem i=0=>(x:=x quo i);break)));r)

แต่มันเป็นเพียง 125 ไบต์


0

R, 52 ไบต์

`if`((n=scan())<2,1,prod(unique(c(1,gmp::factorize(n))))

อ่านnจาก stdin ต้องมีการgmpติดตั้งไลบรารี (ดังนั้น TIO จะไม่ทำงาน) ใช้วิธีการเดียวกันกับคำตอบข้างต้นจำนวนมาก แต่มันล้มเหลวในการป้อนข้อมูลของ1เพราะfactorize(1)ส่งกลับเวกเตอร์ที่ว่างเปล่าของชั้นเรียนbigzซึ่งล้มเหลวuniqueอนิจจา


เอาต์พุตนี้ 12 เมื่อฉันป้อน 12
Flounderer

@ Flounderer คุณถูกต้องฉันได้อัปเดตรหัสแล้ว
Giuseppe



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