ปัจจัยสำคัญสูงสุดของตัวเลขใกล้เคียง


13

ฉันคิดว่ามันง่ายที่สุดในการอธิบายความท้าทายนี้ในลักษณะต่อเนื่อง เริ่มต้นด้วยหมายเลขอินพุตNและ:

  1. ค้นหาปัจจัยสำคัญสูงสุด
  2. ตรวจสอบหมายเลขบนและด้านล่างNและดูว่าปัจจัยสำคัญสูงสุดคือสูงกว่า (คือปัจจัยสำคัญสูงสุดของN-1และ / หรือN + 1สูงกว่าปัจจัยของN
  3. ดำเนินการตรวจสอบตัวเลขที่สูงขึ้นและ / หรือต่ำกว่าที่อยู่ใกล้เคียงNในทิศทางที่ปัจจัยสูงสุดกำลังเพิ่มขึ้น ( (N-2, N-3 ... ) และ / หรือ (N + 2, N + 3 ... )และอื่น ๆ บน)
  4. เมื่อไม่มีปัจจัยสำคัญใด ๆ ในทิศทางที่สูงกว่าที่เราเคยพบมาแล้วเราหยุดและส่งออกปัจจัยสำคัญสูงสุดที่เราพบ

ลองดูตัวอย่าง:

2455, 7, 7มีปัจจัยสำคัญ มันคือเพื่อนบ้าน:

244 -> 2,  2,  61
245 -> 5,  7,  7
246 -> 2,  3,  41

ปัจจัยสำคัญสูงสุดที่เพิ่มขึ้นในทั้งสองทิศทางดังนั้นเราต้องดูเพื่อนบ้านต่อไป:

243 -> 3,   3,  3,  3,  3
244 -> 2,   2,  2,  61
245 -> 5,   7,  7
246 -> 2,   3,  41
247 -> 13,  19

ปัจจัยสำคัญสูงสุดตอนนี้ลดลงในทั้งสองทิศทางดังนั้นปัจจัยสำคัญสูงสุดที่เราพบคือ61ดังนั้นควรส่งคืน

ตัวอย่างอื่น:

ดู Let 's 1024ที่ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2ปัจจัยสำคัญที่จะ ปัจจัยสำคัญของเพื่อนบ้านที่ใกล้ที่สุดคือ:

1023 -> 3, 11, 31
1024 -> 2,  2,  2,  2,  2,  2,  2,  2,  2,  2
1025 -> 5,  5, 41

ปัจจัยสำคัญสูงสุดจะเพิ่มขึ้นในทิศทางทั้งจาก2ไปหรือ31 41ลองดูเพื่อนบ้าน:

1022 -> 2, 7,  73
1023 -> 3, 11, 31
1024 -> 2,  2,  2,  2,  2,  2,  2,  2,  2,  2
1025 -> 5,  5, 41
1026 -> 2,  3,  3, 19

ปัจจัยสำคัญสูงสุดสำหรับการ1022มี73และปัจจัยสำคัญสูงสุดสำหรับการมี1026 19เนื่องจาก19ต่ำกว่าที่41เราไม่สนใจ มันยังคงเพิ่มขึ้นสำหรับตัวเลขที่เล็กกว่า N ดังนั้นเราจะตรวจสอบหมายเลขถัดไปในทิศทางนั้น :

1021 -> 1021
1022 -> 2, 7,  73
1023 -> 3, 11, 31
1024 -> 2,  2,  2,  2,  2,  2,  2,  2,  2,  2
1025 -> 5,  5, 41
1026 -> 2,  3,  3, 19

1021 เป็นนายกและนายกที่สูงที่สุดที่เราเคยพบดังนั้นควรส่งคืน

กฎ:

  • คุณจะได้รับบวกNมากกว่า1และเล็กกว่า2^31-2เท่านั้น
  • รูปแบบอินพุตและเอาต์พุตเป็นตัวเลือก แต่ตัวเลขต้องอยู่ในฐาน 10
  • คุณควรค้นหาช่วงเวลาที่สูงขึ้นต่อไปตราบใดที่ค่าสูงสุดเพิ่มขึ้นในทิศทางนั้น ทิศทางมีความเป็นอิสระจากกัน

กรณีทดสอบ:

รูปแบบ: N, highest_factor

2, 3
3, 3
6, 7
8, 11
24, 23 
1000, 997
736709, 5417 
8469038, 9431

สมมติว่าเราได้รับปัจจัยสำคัญสูงสุด2สำหรับ N จากนั้นเราจะได้5N-1 และ61N + 1 จากนั้นเราจะได้19N-2 และ67N + 2 เราควรจะพยายามที่ต่ำกว่าตัวเลขตั้งแต่19>5หรือหยุดตั้งแต่5<61? คือ Maxima ถูกเก็บไว้ข้าง ๆ ? (ฉันไม่แน่ใจว่าตัวอย่างนี้เป็นไปได้ทางคณิตศาสตร์หรือเปล่า)
PurkkaKoodari

@ Pietu1998 เป็นคำถามที่ชัดเจนมากขึ้นตอนนี้?
Stewie Griffin

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

คำตอบ:


4

Mathematica, 82 74 ไบต์

ขอบคุณ Martin Ender ที่ช่วยประหยัด 8 ไบต์!

Max@@(±n_:=#//.x_/;l[t=x+n]>l@x:>t;l=FactorInteger[#][[-1,1]]&)/@{±-1,±1}&

ฟังก์ชั่นที่ไม่มีชื่อการรับอินพุตจำนวนเต็มและคืนค่าจำนวนเต็ม

±n_:=#//.x_/;l[t=x+n]>l@x:>tกำหนดฟังก์ชั่นยูนารี±ซึ่งช่วยเพิ่มการป้อนจำนวนเต็มของฟังก์ชั่นทั่วโลกโดยnตราบเท่าที่ปัจจัยสำคัญที่ใหญ่ที่สุดคือการเพิ่มขึ้น (ฟังก์ชั่นที่ใหญ่ที่สุดที่สำคัญปัจจัยที่ถูกกำหนดด้วยl=FactorInteger[#][[-1,1]]&.) {±-1,±1}จึงใช้ฟังก์ชั่นที่สองครั้งเพื่อจำนวนเต็มการป้อนข้อมูลที่มีการเพิ่มขึ้นและเพิ่มขึ้นอีกครั้งกับ-1 1จากนั้นMax@@(...l...)/@...นำปัจจัยที่ใหญ่ที่สุดสองประการที่ใหญ่กว่ามาใช้

การส่งก่อนหน้า:

Max@@(l=FactorInteger[#][[-1,1]]&)/@(#//.x_/;l[t=x+#2]>l[x]:>t&@@@{{#,-1},{#,1}})&

บันทึกสองสามไบต์โดยหลีกเลี่ยง@@@(และคุณสามารถใช้ที่l@xนั่น):Max@@(±n_:=#//.x_/;l[t=x+n]>l@x:>t;l=FactorInteger[#][[-1,1]]&)/@{±-1,±1}&
Martin Ender

1

Perl, 137 ไบต์

122 ไบต์ของรหัสเมือง + 15 ไบต์และ-p-Mntheory=:all

sub f{$t=(factor$_+pop)[-1]}$i=$j=1;while($i|$j){f++$c;($i&=$t>$h)&&($h=$t);f-$c;($j&=$t>$l)&&($l=$t)}$_=$h>$l?$h:$l?$l:$_

วิธีเรียกใช้:

perl -pMntheory=:all -e 'sub f{$t=(factor$_+pop)[-1]}$i=$j=1;while($i|$j){f++$c;($i&=$t>$h)&&($h=$t);f-$c;($j&=$t>$l)&&($l=$t)}$_=$h>$l?$h:$l?$l:$_' <<< 736709

หากคุณยังไม่ได้ntheoryติดตั้งคุณสามารถติดตั้งได้โดยพิมพ์ลง(echo y;echo) | perl -MCPAN -e 'install ntheory'ในเทอร์มินัล


0

Ruby, 99 ไบต์

->n{f=->n{i=2;n%i<1?n/=i:i+=1while i<n;n};g=->s,z{s+=z while f[s+z]>b=f[s];b};[g[n,1],g[n,-1]].max}

คำอธิบาย:

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