การนับโซ่ของคันนิงแฮม


14

ตัวเลขที่สำคัญทำให้ผู้คนหลงใหล 2300 ปีที่แล้ว Euclid เขียนใน "Elements" ของเขา

จำนวนเฉพาะคือสิ่งที่วัดโดยหน่วยเดียว

ซึ่งหมายความว่านายกสามารถหารด้วย1(หรือด้วยตัวเอง) เท่านั้น

ผู้คนมักจะมองหาความสัมพันธ์ระหว่างจำนวนเฉพาะและเกิดขึ้นกับบางสิ่งที่แปลก (เช่นใน "น่าสนใจ")

ตัวอย่างเช่นนายก Sophie Germainเป็นนายกpที่2*p+1สำคัญเช่นกัน

นายกปลอดภัยเป็นนายกpที่(p-1)/2ยังเป็นนายกรัฐมนตรีซึ่งเป็นว่าสภาพข้างหลังของนายกโซฟีต์แชร์กแมง

สิ่งเหล่านี้เกี่ยวข้องกับสิ่งที่เรากำลังมองหาในการท้าทายนี้

ห่วงโซ่คันนิงแฮมของประเภทที่เป็นชุดของจำนวนเฉพาะที่องค์ประกอบยกเว้นคนสุดท้ายทุกคนจะเป็นนายกโซฟีต์แชร์กแมงและองค์ประกอบยกเว้นคนแรกที่ทุกคนเป็นนายกปลอดภัย จำนวนขององค์ประกอบในครั้งนี้มีห่วงโซ่ที่เรียกว่ามันยาว

ซึ่งหมายความว่าเราเริ่มต้นด้วยการลากและคำนวณp q=2*p+1ถ้าqเป็นไพร์มด้วยเรามี Cunnigham chain ของ type I ที่มีความยาว 2 จากนั้นเราจะทดสอบ2*q+1และต่อไปเรื่อย ๆ จนกระทั่งจำนวนที่สร้างขึ้นถัดไปเป็นคอมโพสิต

โซ่คันนิงแฮมประเภทIIสร้างขึ้นตามหลักการเดียวกันเกือบทั้งหมดความแตกต่างเพียงอย่างเดียวคือเราตรวจสอบ2*p-1แต่ละขั้นตอน

โซ่คันนิงแฮมสามารถมีความยาว 1ซึ่งหมายความว่า 2 * p + 1 หรือ 2 * p-1 ไม่สำคัญ เราไม่ได้สนใจในสิ่งเหล่านี้

ตัวอย่างบางส่วนของ Cunningham chains

2เริ่มสายโซ่ประเภทที่ฉันมีความยาว 5

2, 5, 11, 23, 47

หมายเลขต่อไปที่สร้างขึ้นจะ95ไม่เป็นจำนวนเฉพาะ
นอกจากนี้ยังบอกเราว่า5, 11, 23และ47ไม่ได้เริ่มต้นห่วงโซ่ของชนิดใด ๆฉันเพราะมันจะมีองค์ประกอบ preceeding

2ก็เริ่มสายโซ่ของประเภทที่สองของความยาว 3

2, 3, 5

ถัดไปจะเป็น9ซึ่งไม่สำคัญ

มาลอง11พิมพ์II กันก่อน (เราแยกออกจากType Iก่อนหน้านี้)
ดี21จะเป็นอย่างไรต่อไปซึ่งไม่ได้เป็นนายกดังนั้นเราจะมีความยาว 1 สำหรับว่า "ลูกโซ่" ซึ่งเราจะไม่นับรวมในความท้าทายนี้

ท้าทาย

เขียนโปรแกรมหรือฟังก์ชั่นที่ได้รับจำนวนnเป็น input เขียน / ผลตอบแทนจำนวนเริ่มต้นของการที่ nห่วงโซ่คันนิงแฮมของประเภท I หรือ IIของอย่างน้อยยาว 2 , ตามด้วยช่องว่างตามด้วยประเภทของห่วงโซ่มันเริ่มต้น ( ฉันหรือII ) ตามด้วยเครื่องหมายจุดคู่ตามด้วยความยาวของห่วงโซ่ประเภทนั้น ในกรณีที่นายกเริ่มต้นโซ่ทั้งสองประเภท (ประเภทที่ 1 และประเภทที่สอง) โซ่ของประเภทที่ 1 จะถูกนับก่อน

ตัวอย่าง: 2 I:5

โปรดจำไว้ว่าnอาจเป็นส่วนหนึ่งของห่วงโซ่เริ่มต้นก่อนหน้านี้ทุกประเภทซึ่งในกรณีนี้ไม่ควรพิจารณาจำนวนเริ่มต้นของห่วงโซ่ประเภทนั้น

เรามาดูกันว่ามันจะเริ่มอย่างไร

2เราเริ่มต้นด้วย 2เนื่องจากเป็นครั้งแรกที่สำคัญในทุกสิ่งที่เราสามารถมั่นใจได้ว่ามีความเป็นห่วงโซ่ไม่เริ่มต้นด้วยที่สำคัญที่ต่ำกว่าที่มี จำนวนต่อไปในห่วงโซ่ของประเภทฉันจะเป็น
มีความสำคัญดังนั้นเราจึงมีสายโซ่ที่มีความยาวอย่างน้อย 2 อยู่แล้ว เรานับว่าเป็นห่วงโซ่แรก แล้ว Type II ล่ะ หมายเลขถัดไปจะเป็น มีความสำคัญดังนั้นโซ่อย่างน้อย 2 ตัวสำหรับประเภท II เช่นกัน เรานับว่าเป็นห่วงโซ่ที่สอง และเรากำลังทำเพื่อ2*2+1 == 55
2*2-1 == 33
2

3ที่สำคัญต่อไปคือ ที่นี่เราควรตรวจสอบว่ามันอยู่ในห่วงโซ่ที่เริ่มต้นที่ต่ำกว่า
ตรวจสอบสำหรับประเภท (3-1)/2 == 1I: 1ไม่สำคัญดังนั้น 3 อาจเป็นจุดเริ่มต้นของสายโซ่ประเภท I.
ลองตรวจสอบดู 3*2+1 == 7ถัดไปจะเป็น 7มีความสำคัญดังนั้นเราจึงมีสายโซ่ชนิดที่ความยาวอย่างน้อย 2 เรานับเป็นห่วงโซ่ที่สาม
ตอนนี้เราตรวจสอบว่า3ปรากฏในห่วงโซ่ประเภท II ที่เริ่มต้นต่ำกว่า (3+1)/2 == 2. 2มีความสำคัญดังนั้น 3 จึงไม่สามารถถือเป็นหมายเลขเริ่มต้นสำหรับสายโซ่ของประเภท II ดังนั้นนี่จะไม่ถูกนับแม้ว่าจำนวนถัดไปหลังจากนั้น3ในห่วงโซ่นี้ซึ่งจะเป็น5เป็นนายกรัฐมนตรี (แน่นอนเรารู้แล้วว่าและคุณสามารถและควรคิดเกี่ยวกับวิธีการตรวจสอบเหล่านี้ของคุณเอง)

และเพื่อให้เราตรวจสอบสำหรับ5, 7, 11และอื่น ๆ นับจนกว่าเราจะพบว่าห่วงโซ่คันนิงแฮม n ของอย่างน้อยยาว 2

จากนั้น (หรือบางเวลาก่อนหน้านี้;)) เราต้องกำหนดความยาวทั้งหมดของ chain ที่เราพบและพิมพ์ผลลัพธ์ในรูปแบบที่กล่าวถึงก่อนหน้า

โดยวิธีการในการทดสอบของฉันฉันไม่ได้พบที่สำคัญใด ๆ นอกเหนือจากที่เริ่มต้นทั้งสองประเภทของเครือข่ายที่มีความยาวมากขึ้นกว่า21

ตัวอย่างอินพุต / เอาท์พุต

อินพุต

1

เอาท์พุต

2 I:5


อินพุต

10

เอาท์พุต

79 II:3


อินพุต

99

เอาท์พุต

2129 I:2


เอาต์พุตสำหรับอินพุต 1..20

2 I: 5
2 II: 3
3 I: 2
7 II: 2
19 II: 3
29 I: 2
31 II: 2
41 I: 3
53 I: 2
79 II: 3
89 I: 6
97 II: 2
113 I: 2
131 I: 2
139 II: 2
173 ฉัน: 2
191 I: 2
199 II: 2
211 II: 2
229 II: 2

รายชื่อของเอาท์พุท 5000 ครั้งแรกที่สามารถพบได้ที่นี่

นี่คือรหัสกอล์ฟ ช่องว่างโดยพลการได้รับอนุญาตในการส่งออก แต่ประเภทและตัวเลขควรคั่นด้วยช่องว่างเดียวและลำไส้ใหญ่ตามที่เห็นในตัวอย่าง การใช้ช่องโหว่ใด ๆ ที่ไม่ได้รับอนุญาตโดยเฉพาะอย่างยิ่งได้รับผลจากเว็บจะไม่ได้รับอนุญาต

โชคดี :)


3
ลืมพูดถึงในแซนด์บ็อกซ์: มันง่ายที่จะพิสูจน์ว่า2และ3เป็นเพียงช่วงเวลาเดียวpที่ทั้งคู่2p-1และ2p+1เป็นช่วงเวลาดังนั้นจึง2เป็นไพรม์เดียวที่เริ่มต้นเชน Cunningham ที่ไม่สำคัญของทั้งสองประเภท
ปีเตอร์เทย์เลอร์

ตกลง. ขอบคุณสำหรับความช่วยเหลือของคุณ:)
Cabbie407

3
(แปลงความคิดเห็นจากคำตอบ) ไม่มีช่วงเวลาอื่นใดนอกจาก2ความยาวสายโซ่คู่ที่มากกว่า 1 นี่คือการพิสูจน์โดยการกำจัด
pbeentje

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

เพียงคำพูด ฉันไม่คิดว่ามันจะเปลี่ยนความท้าทายในทุกกรณีเท่านั้นที่อาจเป็นประโยชน์สำหรับการเล่นกอล์ฟ: เมื่อพบโซ่หนึ่งโซ่อีกโซ่ไม่จำเป็นต้องตรวจสอบ
pbeentje

คำตอบ:


2

Javascript, 236 208 ไบต์

บันทึก 28 ไบต์:

p=(n,i=n)=>n%--i?p(n,i):i==1;f=n=>{for(k=2,c=0;c<n;k++){p(k)&&!p((k-1)/2)&&p(2*k+1)&&(c++,l=1,r='');p(k)&&c-n&&!p((k+1)/2)&&p(2*k-1)&&(c++,l=-1,r='I');};alert(--k+` I${r}:`+eval(`for(j=1;p(k=2*k+l);j++);j`))}

ที่บันทึกไว้ 9 ไบต์ในpฟังก์ชั่น:p=(n,i=n)=>n%--i?p(n,i):i==1
tฟังก์ชั่นก็ถูกแทนที่ด้วยeval(...)คำสั่งโดยตรงในfฟังก์ชั่น


โซลูชันก่อนหน้า:

p=n=>{for(i=n;n%--i&&i;);return 1==i};t=(n,m)=>{for(j=1;p(n=2*n+m);j++);return j};f=n=>{for(k=2,c=0;c<n;k++){p(k)&&!p((k-1)/2)&&p(2*k+1)&&(c++,l=1,r='');p(k)&&c-n&&!p((k+1)/2)&&p(2*k-1)&&(c++,l=-1,r='I');};alert(--k+` I${r}:${t(k,l)}`)}

ตัวอย่าง: f(6)

เอาท์พุท: 29 I:2

คำอธิบาย
ฉันใช้ 3 ฟังก์ชั่น

1 p : รู้ถ้าnเป็นจำนวนเฉพาะหรือไม่: p=n=>{for(i=n;n%--i&&i;);return 1==i}

2 t : เพื่อทราบความยาวของเชนคันนิงแฮมที่เริ่มต้นด้วยnของ type I หรือ II ขึ้นอยู่กับพารามิเตอร์mซึ่งจะเป็น 1 หรือ -1: t=(n,m)=>{for(j=1;p(n=2*n+m);j++);return j}

3 f : นับจำนวนเชน ( สำหรับลูป ) จากนั้นแสดงผลลัพธ์

f=n=>{for(k=2,c=0;c<n;k++){p(k)&&!p((k-1)/2)&&p(2*k+1)&&(c++,l=1,r='');p(k)&&c-n&&!p((k+1)/2)&&p(2*k-1)&&(c++,l=-1,r='I');};alert(--k+` I${r}:${t(k,l)}`)}

สำหรับการวนซ้ำ : สำหรับแต่ละจำนวนเชนคันนิงแฮม (ฉันแล้วครั้งที่สองถ้าจำเป็น) จะใช้ได้ถ้า

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