จำนวนที่ไม่ได้ใช้น้อยที่สุดเป็นการแบ่งปันปัจจัย


11

นี่เป็นคำถามที่น่าสนใจ ฉันจะกำหนดลำดับและคุณกอล์ฟรหัสบางอย่างเพื่อส่งออกรายการที่ได้รับดัชนี

  • รายการแรกในลำดับคือ 2

  • รายการที่ n ในลำดับนั้นเป็นจำนวนเต็มบวกที่เล็กที่สุดที่ไม่ใช่ n และ 1 ที่ใช้ร่วมกันอย่างน้อยหนึ่งปัจจัยที่มี n (นอกเหนือจาก 1) ที่ยังไม่ปรากฏในรายการ

กรณีทดสอบ

นี่คือ 25 รายการแรกในลำดับ:

1  2
2  4
3  6
4  8
5  10
6  3
7  14
8  12
9  15
10 5
11 22
12 9
13 26
14 7
15 18
16 20
17 34
18 16
19 38
20 24
21 27
22 11
23 46
24 21
25 30

ที่เกี่ยวข้อง (ชดเชยโดยหนึ่ง) OEIS

คำตอบ:


5

เยลลี่ขนาด 19 ไบต์

R»2ɓ²Rg⁸>1Tḟ⁸ḟḢṭµ/Ṫ

ลองออนไลน์!


ฉันมีความสุขมากที่ฉันมีเธอออกแข็งแรงเล่นกอล์ฟในลินดอนคำตีนเป็ดคำถาม แต่แล้วคุณตีฉันด้วยนี้ ... (ในร้ายแรงทั้งหมด แต่นี่เป็นคำตอบที่ดี)
notjagan

3

Python 3 , 118 117 bytes

-1 ไบต์ต้องขอบคุณCameron Aavik !

import math
def f(n,i=3):
 if n<2:return 2
 while 1:
  if math.gcd(n,i)>1>(i in map(f,range(n)))<i!=n:return i
  i+=1

ลองออนไลน์!

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


2
เคล็ดลับเล็ก ๆ : คุณสามารถบันทึกบรรทัดใหม่ได้โดยการทำมันdef f(n,i=3):และลบi=3บรรทัดออกไป
Cameron Aavik

115 ไบต์
Jonathan Frech

2

Haskell , 60 59 ไบต์

แก้ไข:

  • -1 ไบต์: @xnor ออกชี้สั้นกว่าall(/=x)x`notElem`

f รับจำนวนเต็มและคืนค่าจำนวนเต็ม

f n=[x|x<-[2..],gcd x n>1||n<2,all(/=x)$n:map f[1..n-1]]!!0

ลองออนไลน์!

นี่เป็นเวลาเอ็กซ์โพเนนเชียลมากดังนั้น TIO จึงหมดเวลาหลังจาก 21 ขณะที่ GHCi ตีความของฉันเพิ่มขึ้นถึง 22 ก่อนที่ฉันจะหยุดมันทันที รุ่นที่มีความยาว 9 ไบต์ต่อไปนี้การจดจำลงในรายการสามารถขึ้นไปเป็นหลักพันได้อย่างง่ายดาย:

f n=[x|x<-[2..],gcd x n>1||n<2,all(/=x)$n:take(n-1)l]!!0
l=f<$>[1..]

ลองออนไลน์!

  • f nใช้ความเข้าใจในการสร้างรายชื่อผู้สมัครสละหนึ่งผ่านครั้งแรกกับx!!0
  • gcd x n>1ตรวจสอบxและnมีปัจจัยร่วมกัน
  • ||n<2ยกเว้นn==1จากข้อกำหนดของปัจจัย
  • all(/=x)$n:map f[1..n-1]ตรวจสอบว่าxไม่ใช่nองค์ประกอบลำดับก่อนหน้า

@WheatWizard หืมคงไม่แตกต่างกันในกรณีนี้ เพียงใช้ในการทำตามค่าเริ่มต้น มันเป็นหนึ่งในฟังก์ชั่นตัวอักษรและตัวเลขไม่กี่ตัวที่กำหนดฟิกซ์เจอร์ให้พอดี
Ørjan Johansen

1
all(/=x)$สั้นกว่านั้น 1 ตัว
xnor

2

ไม่มี GCD ในตัวใน C # ดังนั้น ...

C # (. NET Core) , 197 196 194 ไบต์

n=>{if(n<2)return 2;var p=new int[n-1];int i=0,a,b;for(;i<n-1;)p[i]=f(++i);for(i=2;;i++)if(n!=i){for(a=n,b=i;a*b>0;)if(a>b)a%=b;else b%=a;if(b!=1&a!=1&!System.Array.Exists(p,e=>e==i))return i;}}

ลองออนไลน์!

อย่าใช้รหัสนี้ในการคำนวณตัวเลขตามลำดับสำหรับn>30...

  • -1 ไบต์โดยการเปลี่ยนwhileลูปGCD สำหรับforลูป
  • ขอขอบคุณ Kevin Cruijssen ถึง 2 ไบต์! ทำได้ดีนี่!

1
a>0&b>0สามารถเล่นกอล์ฟได้ที่a*b>0
Kevin Cruijssen

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