गुमशुदा की प्रिंटिग करें


18

काम

एक प्रोग्राम या फ़ंक्शन लिखें, जो एक संख्यात्मक इनपुट पारित करते समय x, x1 के वर्गमूल के नीचे के प्रिंटों को प्रिंट करता है या वापस करता है, जिनके कारक नहीं हैं x

उदाहरण

आज्ञा दें f(x)समारोह कहा जाता है:

>>> f(4)
[]

>>> f(5)
[2]

>>> f(20)
[3]

>>> f(60)
[7]

>>> f(100)
[3, 7]

>>> f(10000)
[3, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

बोनस नियम

  • आप अपनी भाषा प्रदान करने वाले किसी भी निर्माण का उपयोग कर सकते हैं।
  • आपके प्रोग्राम को xआपकी भाषा द्वारा परिभाषित ऊपरी बाउंड के रूप में एक इनपुट का समर्थन करना चाहिए ।

1 वर्गमूल का उपयोग करना क्योंकि केवल वर्गमूल के नीचे के प्राइम्स वास्तव में कारकों के भीतर शामिल हो सकते हैं x। इस प्रतिबंध के बिना, बड़ी संख्या में बहुत अधिक मुद्रित संख्याएँ होंगी।


3
"केवल वर्गमूल के नीचे के प्राइम्स वास्तव में कारकों के भीतर शामिल हो सकते हैं x" यह सच नहीं है: एक संख्या में एक प्रमुख कारक हो सकता है जो कि प्रत्येक वर्गमूल से बड़ा हो। वास्तव में, आपके पहले दो उदाहरणों (5 और 20) में यह संपत्ति है, जैसा कि सभी primes करते हैं, दो बार सभी अजीब अपराध करते हैं, ....
ग्रेग मार्टिन

1
@GregMartin हां, वे कर सकते हैं - लेकिन वे कारकों के पहले आधे के भीतर नहीं मिल सकते हैं। यह समझ में नहीं आता है कि 48 के लापता अपराधों में 7 को शामिल नहीं किया जा सकता है क्योंकि 7 ^ 2 48 से अधिक है। (मेरे तर्क में निहित है)
Addison Crump

जवाबों:


8

जेली, जेली के कोडपेज में 6 बाइट्स

½ÆRḟÆf

इसे ऑनलाइन आज़माएं!

स्पष्टीकरण:

½ÆRḟÆf
 ÆR    All primes less than or equal to
½      the square root of the input
   ḟ   but with the following removed:
    Æf All prime factors of {the input, by default}

5
जेली के उत्तर अक्सर चुनौती का वर्णन करते हैं: P
ETHproductions



5

MATLAB, 57 54 बाइट्स

function h(p);a=primes(p^.5);a(~ismember(a,factor(p)))

बहुत सीधा है, sqrt (p) तक के प्राइमों की एक सरणी प्राप्त करता है फिर किसी भी को हटाता है जो p के कारक भी हैं। अंतिम पंक्ति के आउटपुट को डिफ़ॉल्ट रूप से प्रिंट करता है क्योंकि अर्धविराम को छोड़ दिया जाता है।


1
मैंने कभी MATLAB की कोशिश नहीं की, लेकिन मैंने इसके बारे में जो पढ़ा है, उसके अनुसार sqrt (p) को p ^ 0.5 और शायद p ^ 5 के रूप में लिखा जा सकता है, हालांकि मैं दूसरे सुझाव के बारे में सुनिश्चित नहीं हूं
t-clausen.dk

अच्छा! :) मैंने उसी दृष्टिकोण का उपयोग करके एक ऑक्टेव सबमिशन पोस्ट किया।
स्टीवी ग्रिफ़िन

4

अजगर, 10 बाइट्स

fP_T-S@Q2P

एक प्रोग्राम जो एक नंबर का इनपुट लेता है और एक सूची प्रिंट करता है।

परीक्षण सूट

यह काम किस प्रकार करता है

fP_T-S@Q2P   Program. Input: Q
fP_T-S@Q2PQ  Implicit input fill
f            Filter
     S@Q2    the 1-indexed range up to floor(sqrt(Q))
    -    PQ  with the prime factors of Q removed
 P_T         by primality
             Implicitly print


3

PHP, 76 बाइट्स

for($n=1;++$n*$n<$x=$argv[1];){for($i=$n;$n%--$i;);if($i<2&&$x%$n)echo$n,_;}

$ n> 1 के लिए मेरे is_prime समाधान का उपयोग किया जाता है

कमांड लाइन तर्क से इनपुट लेता है। साथ चलाना -r


2

मैथेमेटिका, 46 बाइट्स

Select[Prime@Range@PrimePi@Sqrt[a=#],!#∣a&]&

अनाम फ़ंक्शन। एक नंबर को इनपुट के रूप में लेता है और आउटपुट के रूप में संख्याओं की एक सूची देता है। यूनिकोड वर्ण U + 2223 के लिए है \[Divides]


2

रूबी, 55 बाइट्स

require'prime'
->x{Prime.to_a(x**0.5).select{|n|x%n>0}}

बिलिन प्राइम एन्यूमरेटर का उपयोग करते हुए एक आलसी उत्तर।




2

PowerShell v2 +, 71 बाइट्स

param($n)1..[math]::Sqrt($n)|?{$n%$_-and'1'*$_-match'^(?!(..+)\1+$)..'}

Iterative समाधान। इनपुट लेता है $nऔर से एक सीमा बनाता 1करने के लिए Sqrt($n)(ध्यान दें कि सीमा ऑपरेटर परोक्ष एक करने के लिए ऊपरी छोर डाली जाएगा [int]जो डिफ़ॉल्ट रूप से बैंकर की गोलाई काम हो जाएगा)। तब का उपयोग करता है |?{...}( Where-Objectऑपरेटर है, जो एक फिल्टर की तरह काम करता) उन संख्याओं को जहां बाहर निकलने के लिए $n%$_है गैर शून्य (यानी, सापेक्ष साधन के लिए किसी भी शेष है ना एक कारक है, और किसी भी गैर शून्य truthy है) हमेशा की तरह regex प्रधानमंत्री परीक्षण है-and$true । उन पाइप लाइन पर छोड़ दिया जाता है, और आउटपुट निहित है।

उदाहरण

(कुछ अतिरिक्त स्वरूपण के साथ आउटपुट को सुंदर बनाने के लिए)

PS C:\Tools\Scripts\golfing> 5,20,60,100,10000|%{"f($_)";(.\print-the-missing-primes.ps1 $_)-join', ';""}
f(5)
2

f(20)
3

f(60)
7

f(100)
3, 7

f(10000)
3, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97

एनबी - यह पहले के संस्करणों पर विफल हो जाएगा यदि इनपुट चारों ओर से बड़ा है 2500000000, क्योंकि ..रेंज ऑपरेटर केवल 50,000 वस्तुओं का समर्थन कर सकता है। लेकिन, चूंकि यह डिफ़ॉल्ट [int]डेटाटाइप के अधिकतम मूल्य से बड़ा है , इसलिए 2147483647, मैं मान रहा हूं कि यह ठीक है। मेरी मशीन पर, PSv4 Win8.1, हालांकि, मैं उच्चतर जा सकता हूं, लेकिन मैं अंतर को समझाते हुए दस्तावेज नहीं ढूंढ पा रहा हूं।


2

जावास्क्रिप्ट (ईएस 6), 79 76 बाइट्स

f=(q,n=2,x=n)=>n*n<q?[...--x<2&&q%n?[n]:[],...x>1&&n%x?f(q,n,x):f(q,n+1)]:[]

मेरे पुनरावर्ती प्राइमलिटी टेस्ट फ़ंक्शन के आधार पर । मुझे लगता है कि इसे सरल बनाने के लिए कुछ तरीके होने चाहिए, लेकिन मैं यह नहीं जान सकता कि कैसे ...

टेस्ट स्निपेट

f=(q,n=2,x=n)=>n*n<q?[...--x<2&&q%n?[n]:[],...x>1&&n%x?f(q,n,x):f(q,n+1)]:[]
<input type="number" step=1 min=4 value=4 oninput="O.innerHTML='['+f(this.value)+']'"><br>
<pre id=O>[]</pre>


2

ऑक्टेव, 44 बाइट्स

यह उत्तर मैटवॉ के MATLAB उत्तर से प्रेरित है , लेकिन मैंने कुछ ऑक्टेव-विशिष्ट सुविधाओं का उपयोग करके इसे गोल्फ किया है।

@(x)(y=primes(x^.5))(~ismember(y,factor(x)))

यह एक अनाम फ़ंक्शन है जो इनपुट लेता है x। ऑक्टेव में इनलाइन वैरिएबल असाइनमेंट और इंडेक्सिंग है जो yपहले फ़ंक्शन (MATLAB में संभव नहीं) को बनाने की अनुमति देता है, फिर तार्किक मास्क के भाग के रूप में उपयोग किया जाता है ismember(फिर से, MATLAB में इस तरह से करना संभव नहीं है)।


बहुत अच्छा, ऑक्टेव में देखना होगा। उन सुविधाओं गोल्फ के लिए उपयोगी होगा!
मैट डब्ल्यूएच

1

पर्ल 6 , 37 बाइट्स

{grep {$^a.is-prime&$_%$a},2.. .sqrt}

विस्तारित:

{   # bare block lambda with implicit parameter 「$_」

  grep
  {
    $^a.is-prime  # check if it is prime
    &             # and junction
    $_ % $a       # check if the input is not evenly divisible by it
  },
  2.. .sqrt          # Range of values up-to and including squareroot
}

1

TSQL, 130 बाइट्स

DECLARE @v int=10000

,@ INT=2SELECT 2p INTO #
g:INSERT # SELECT @ FROM # HAVING isnull(min(@%p),1)>0SET @+=1IF @*@<@v GOTO g
SELECT*FROM # WHERE @v%p>0

यह केवल एक बार निष्पादित करेगा, फिर आपको उसी संपादक में फिर से निष्पादित करने के लिए अस्थायी तालिका को छोड़ने की आवश्यकता है

DROP TABLE #

मैंने इसका परीक्षण करने के लिए एक संस्करण बनाया है, यह थोड़ा लंबा है क्योंकि टेबल बनाने की ऑनलाइन अनुमति उपलब्ध नहीं है। उसी कारण से इसे ड्रॉप टेबल की जरूरत नहीं है।

इसे ऑनलाइन आज़माएं


1

आर, 58 63 बाइट्स

for(i in 2:sqrt(x<-scan()))if(x%%i&numbers::isPrime(i))print(i)

2 से सभी मानों पर लूप्स sqrt(x)और चेक करें कि क्या वे numbersपैकेज के साथ प्राइम हैं । x%%iगणना x mod iकरता है 0 -> Falseकि कौन सा अगर iका विभाजक है xऔर >0 -> Trueयदि iनहीं है।

+5 बाइट्स क्योंकि numbers::Primes(n)फंक्शन दशमलव को अनुमति नहीं देता है, जबकि 2:sqrt(x)काम करता है, प्राइम चेक को ifस्टेटमेंट में जोड़ा जाता है।


1

हास्केल, 55 54 बाइट्स

f x=[y|y<-[2..x],y*y<x,[z|z<-[1..y],gcd(z*x)y>1]==[y]]

ज्यादातर सीधी नेस्टेड सूची की समझ। GCD दो भूमिकाएँ निभाती है, यह जाँच कर कि क्या y के नीचे की संख्याएँ y के कारक हैं और यह भी जाँच रहे हैं कि y x का कारक है या नहीं।

थोड़ा बाहर रखा:

f x = [ y|y<-[2..x],     y*y<x,     [z|z<-[1..y], gcd (z*x) y > 1] == [y] ]

एक बाइट के साथ सहेजें gcd(z*x)y>1
जर्ग डेब

मैंने y * y <x को पहले से जाँच लिया है ताकि यह थोड़ा तेज़ हो सके।
जेम्स हॉलिस

0

रेटिना , 69 66 बाइट्स

.+
$*
(11\1|^1)+
$#1$*1:$&
M!&`(?!(11+)\1+:)(1+):(?!\2+$)
M%`1
^0

प्रिंट को अलग-अलग लाइनों पर प्रिंट करता है, सबसे बड़े से लेकर सबसे छोटा तक।

इसे ऑनलाइन आज़माएं!(पिछले दो परीक्षण मामलों के कारण लगभग 10 सेकंड लगते हैं। हेडर और फुटर एक लाइनफीड-अलग टेस्ट सूट को सक्षम करते हैं, और आउटपुट को कॉम्पे-रीडेबिलिटी के लिए परिवर्तित करते हैं।)

व्याख्या

.+
$*

इनपुट को unary में कनवर्ट करें।

(11\1|^1)+
$#1$*1:$&

यह इनपुट के वर्गमूल को अलग करता है :। वर्गमूल की गणना इस तथ्य के आधार पर की जाती है कि का वर्ग nपहले nविषम पूर्णांक का योग भी होता है। हम आगे के संदर्भ के साथ लगातार विषम पूर्णांक का मिलान कर सकते हैं (11\1|^1)। प्रक्रिया में समूह का उपयोग ठीक nसमय पर किया जाएगा , जहांn सबसे बड़ी संख्या है जिसका वर्ग इनपुट में फिट बैठता है।

हम इस संख्या के साथ एक एकीकृत प्रतिनिधित्व सम्मिलित करते हैं $#1$*1, इसके बाद एक बृहदान्त्र और स्वयं मैच होता है।

M!&`(?!(11+)\1+:)(1+):(?!\2+$)

यह उन सभी गुमशुदा अपराधों से मेल खाता है जो वर्गमूल में फिट होते हैं। प्राइम डिटेक्शन स्टैंडर्ड प्राइम चेकिंग रेगेक्स पर आधारित है , और फिर हम केवल यह सुनिश्चित करते हैं कि जिस प्राइम को हमने अभी कैप्चर किया है वह इनपुट को दूसरे लुकहेड के साथ विभाजित नहीं करता है। &विकल्प का उपयोग करके , हमें यह सुनिश्चित करने के लिए ओवरलैपिंग मैच मिलते हैं कि हमें सभी प्राइम मिलते हैं।

M%`1

यह प्रत्येक पंक्ति (यानी प्रत्येक प्राइम प्राइम) को 1s की संख्या से मेल करके दशमलव में वापस बदल देता है । एकमात्र मुद्दा यह है कि यह एक शून्य सम्मिलित करता है यदि कोई लापता primes बिल्कुल नहीं मिला।

^0

तो यह चरण उस शून्य को हटा देता है यदि इसे जोड़ा गया था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.