सबसे छोटा n- अंकों वाला अभाज्य, जिसमें केवल ये अंक होते हैं


26

आपको nअंकों के साथ सबसे छोटा प्राइम जेनरेट करना होगा, और इसमें केवल सूची में निर्दिष्ट अंक होंगे k

उदाहरण:

इनपुट:

4
1 2

इसके लिए, आपको 4अंकों के साथ सबसे छोटा प्राइम उत्पन्न करना होगा , और उस प्राइम में केवल अंक 1और होने चाहिए 2

आउटपुट:

2111

इनपुट:

10
0 4 7 

आउटपुट:

4000000007

इनपुट:

6
5 5 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 5 5

आउटपुट:

115151

आप यह गारंटी दे सकते हैं कि इनपुट हमेशा आपके द्वारा निर्दिष्ट प्रारूप में होगा, और यदि आप अमान्य इनपुट (जैसे इनपुट एकल अंक n, बिना k) प्राप्त करते हैं, तो आप कुछ भी कर सकते हैं ।

यदि इनपुट का ऐसा कोई समाधान मौजूद नहीं है, तो आपके प्रोग्राम को निम्न में से कोई भी करने की अनुमति है:

  • छाप banana
  • एक त्रुटि फेंको
  • हमेशा के लिए भागो
  • और कुछ

चूंकि यह , इसलिए सबसे छोटे कोड के लिए लक्ष्य बनाने का प्रयास करें।

इनपुट आपके द्वारा निर्दिष्ट किसी भी प्रारूप में हो सकता है। उदाहरण के लिए, यदि आप चाहते हैं कि आपका इनपुट निम्नलिखित में से किसी एक जैसा हो, तो यह ठीक है।

4
[1, 2]

[1,2]4

1,2
4

4 12

आप या तो एक कार्यक्रम या एक फ़ंक्शन लिख सकते हैं, और इसे या तो सही मान वापस करना होगा या इसे प्रिंट करना होगा।

कहीं भी व्हॉट्सएप की अनुमति है।

यह चुनौती A036229 से प्रेरित है ।


2
अनिवार्य प्रश्न: क्या हम किसी भी आधार का उपयोग कर सकते हैं? (चुनौती
एकतरफा

यदि शून्य इनपुट अंकों में से एक है, तो क्या समाधान में अग्रणी शून्य हो सकता है?
लुइस मेंडो

निश्चित रूप से @flawr नहीं, मुझे लगता है कि यह मानक खामियों के तहत आ सकता है (यदि नहीं, तो इसे जोड़ने की आवश्यकता है)
ओएक्सएक्स

1
@LuisMendo मैं 'उचित' संख्या के रूप में नहीं गिना जाएगा, इसलिए नहीं।
ठीक 28

क्या सूची एक सेट शाब्दिक हो सकती है? और पूर्णांक के बजाय वर्ण? (@ xnor का पायथन जवाब उन का उपयोग कर रहा है)
mbomb007

जवाबों:


4

ब्रेकीलॉग (2), 8 बाइट्स

j₍oᵐ∋ᵐcṗ

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

जो संभव अंक की एक बहुत कुछ है, या जो संभव अंकों की सेट में एक 0 शामिल समस्याओं पर बहुत धीमी गति से (यह करता है काम इस मामले में, यह सिर्फ है कि यह इतना बहुत धीमी है कि जब तक समस्या का बहुत ही सरल बाहर TIO बार)। हमेशा की तरह Brachylog के लिए, यह एक फंक्शन है, न कि पूरा प्रोग्राम।

इनपुट प्रारूप में लिया जाता है [ndigits,[list of digits]], उदाहरण के लिए [10,[[0,4,7]]]

व्याख्या

j₍oᵐ∋ᵐcṗ
j₍        Make a number of copies of the second element equal to the first element
  oᵐ      Sort each (ᵐ) of those copies (evaluation order hint)
    ∋ᵐ    Take one element from each of those copies
      c   Concatenate those elements to form an integer (asserts no leading 0)
       ṗ  producing a prime number

विशुद्ध रूप से घोषित दृष्टिकोण से देखा गया है, यह कहता है "एक प्रमुख संख्या ज्ञात करें, दिए गए अंकों की संख्या के साथ, जहां सभी अंक दिए गए अंकों में से एक हैं"। इस तरह की सबसे छोटी संख्या को खोजने के लिए , हम मूल्यांकन क्रम का उपयोग करते हैं ताकि यह सुनिश्चित किया जा सके कि जिस क्रम में हम संख्याओं का परीक्षण करते हैं वह सबसे छोटा है; इस मामले में, सूची की शुरुआत के पास निर्णय लेने की संभावना कम होती है, जो अंत के निकट के फैसलों की तुलना में बदल जाती है (यह इसका प्राकृतिक क्रम है, जो लेक्सिकोग्राफिक के समान होता है और इस प्रकार पूर्णांक पर संख्यात्मक क्रम होता है), और इस तरह {o∋}ᵐदो मूल्यांकन क्रम होते हैं। संकेत, "पिछले कुछ अंकों में भिन्नता है" ( 'प्राकृतिक क्रम से) अधिक महत्वपूर्ण संकेत के रूप में, और "बड़े अंकों से पहले छोटे अंकों की जांच करें" ( oपहले से), जो इस संदर्भ में संकेत के रूप में कार्य करता है) टाईब्रेक के रूप में। एक बाइट को बचाने के {o∋}ᵐलिए बराबर के रूप में लिखा जा सकता है oᵐ∋ᵐ


12

बैश + बीएसडी-गेम पैकेज, 28 बाइट्स

  • 18 बाइट्स ने @ डेनिस को धन्यवाद दिया।
primes 1|egrep -wm1 [$2]{$1}

कमांड-लाइन पर दिए गए इनपुट को n और उसके बाद अंकों की गैर-सीमांकित सूची के रूप में k।

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


9

पायथन 2 , 66 बाइट्स

f=lambda n,s,k=1,p=1:10**~-n<p%k*k<s>=set(`k`)or-~f(n,s,k+1,p*k*k)

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

जैसे इनपुट लेता है f(3,{'9','3','8'})

पायथन में अपराधों के लिए कोई बिल्ट-इन नहीं है, इसलिए फ़ंक्शन विल्सन के प्रमेय का उपयोग करके उन्हें उत्पन्न होने के लिए प्रत्येक संभावित मूल्य की जांच करने के लिए उत्पन्न करता है k

जंजीर असमानता 10**~-n<p%k*k<s>=set(`k`)तीन स्थितियों को जोड़ती है k:

  • 10**~-n<k: kइसमें कम से कम nअंक होते हैं। हमें ठीक से जांचने की आवश्यकता नहीं है क्योंकि यदि हम अधिक अंकों तक पहुंचते हैं, तो कोई समाधान नहीं होना चाहिए
  • p%k>0: kविल्सन की प्रमेय स्थिति के माध्यम से प्रमुख है p=(n-1)!^2। चूंकि p%k0 या 1 है, इसे पिछली स्थिति के साथ जोड़ा जा सकता है10**~-n<p%k*k
  • s>=set(`k`): सभी अंक kसेट में हैं s। यह उबाला जा सकता है क्योंकि पायथन 2 संख्याओं की तुलना में सेट को बड़ा मानता है।

यदि वर्तमान kइन सभी को संतुष्ट नहीं करता है, तो फ़ंक्शन k+1परिणामी आउटपुट में 1 जोड़कर, पुनरावृत्ति करता है । चूँकि आउटपुट Trueकिस समतुल्य के साथ समाप्त होता है 1, और kशुरू होता है 1, आउटपुट है k। सफलता पर सीधे kआउटपुट बीट्स की यह समानांतर ट्रैकिंग k


वाह - विल्सन के प्रमेय का भयानक उपयोग!
चैंडलर वॉटसन

5

जावास्क्रिप्ट (ईएस 7), 100 बाइट्स

इनपुटिंग सिंटैक्स में nअंकों की संख्या और अनुमत अंकों की स्ट्रिंग के रूप में इनपुट लेता है । यदि कोई समाधान नहीं मिला है, तो लौटाता है।s(n)(s)undefined

जल्दी से 6 अंकों के लिए काम करता है, 7 के लिए काम कर सकते हैं और निश्चित रूप से बहुत धीमी गति से - और भूख भूख - इससे परे है।

n=>s=>(a=[...Array(10**n).keys()]).find(i=>eval(`/[${s}]{${n}}/`).test(i)&&a.every(j=>j<2|j==i|i%j))

परीक्षा


वास्तव में मैंने क्या किया होगा, शायद एक अलग परिक्षण परीक्षा के अलावा। मैं देखता हूँ कि मेरा तरीका आपकी तुलना कैसे करता है ...
ETHproductions

@ETHproductions मैंने एक पुनरावर्ती प्राणिकता परीक्षण के साथ शुरू किया था, लेकिन इसे 4 अंकों तक सीमित कर दिया था (या शायद कुछ ब्राउज़रों पर थोड़ा अधिक?)
अर्नुलद

एक पुनरावर्ती समाधान के लिए मेरा पहला विचार चार बाइट्स छोटा है, लेकिन यह बड़ी संख्या के लिए एक त्रुटि फेंक देता है। मेरे पास थाn=>s=>[...Array(10**n).keys()].find(i=>eval(`/[${s}]{${n}}/`).test(i)&(p=j=>i%--j?p(j):j==1)(i))
ETHproductions

@ETHproductions मैं भी && के बजाय & का उपयोग करने के लिए लुभाया गया था। लेकिन प्रदर्शन के लिहाज से यह बहुत महंगा बाइट है।
अरनौल्ड 23

Chrome का वर्तमान संस्करण TCO का समर्थन करता है यदि आप "सक्षम-जावास्क्रिप्ट-सद्भाव" ध्वज को सक्षम करते हैं (बस क्रोम पर जाएं: // झंडे और उस विकल्प को
ढूंढें

4

जेली , 12 बाइट्स

DL×ÆP
ṗḌÇÐṀṂ

कमांड-लाइन तर्कों के रूप में एक सेट और पूर्णांक लेता है। प्रिंट 0 यदि कोई समाधान मौजूद नहीं है।

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

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

ṗḌÇÐṀṂ  Main link. Left argument: A (digit set/array). Right argument: n (integer)

ṗ       Cartesian power; yield all arrays of length n that consist only of elements
        of the array A.
 Ḍ      Undecimal; convert all generated digit arrays to integers.
  ÇÐṀ   Keep only elements for which the helper link returns a maximal result.
     Ṃ  Take the minimum.


DL×ÆP   Helper link. Argument: k (integer)

D       Decimal; convert k into the array of its base 10 digits.
 L      Take the length.
   ÆP   Test if k is a prime number. Yields 1 or 0.
  ×     Multiply the length and the Boolean.

3

पाइके, 18 16 बाइट्स

j;~p#`ljqi`Q-!)h

यहाँ कोशिश करो!

अगर कोई मूल्य नहीं मिला तो हमेशा के लिए चलता है


@ ऑक्स अब तेजी से दौड़ने के लिए पर्याप्त होना चाहिए अगर सभी परीक्षण के मामले अब नहीं हैं
ब्लू

@ ओएक्सएक्स आपको पता है कि आप पाइके डाउनलोड कर सकते हैं और इसे ऑफ़लाइन चला सकते हैं यदि आप इसे बिना समय सीमा के पूरी तरह से परीक्षण करना चाहते हैं?
ब्लू

मुझे माफ करें। मुझे लगा कि यह कोड है। समय समाप्त हो जाता है चार सेकंड के बारे में है जो बहुत ज्यादा नहीं है।
ओकेक्स

3

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

FirstCase[Tuples@##,x:{f_,___}/;f>0&&PrimeQ[y=FromDigits@x]:>y]&

शुद्ध फ़ंक्शन जहां पहला तर्क अनुमत अंकों की (सॉर्ट की गई) सूची है और दूसरा तर्क अनुमत लंबाई है। Tuples@##अनुमत लंबाई के स्वीकृत अंकों की सभी सूचियों की गणना करता है, फिर हम ऐसे FirstCaseमिलानों को खोजते x:{f_,___}हैं जो पहला अंक fनहीं है 0और पूर्णांक y=FromDigits@xप्रमुख है और इसकी जगह ले लेता है y


2
यह अच्छा है कि आप /;टपल का चयन करने के लिए परीक्षण का उपयोग कैसे करते हैं लेकिन :>वांछित आउटपुट प्रारूप में भी परिवर्तित होते हैं। (मैं उस दस्तावेज़ में देखता हूं जिसे अनुमति दी गई है, लेकिन इस उत्तर को पढ़ने के बाद ही!) आपको यह निर्दिष्ट करना चाहिए कि आपके फ़ंक्शन को अनुमत अंकों को क्रमबद्ध करने की आवश्यकता है: यह गलत उत्तर देने के 3331बजाय 3313अगर साथ बुलाया जाता है [{3,1},4]
ग्रेग मार्टिन

@ngenisis कैसे Select[FromDigits/@Tuples[Sort@#,#2],PrimeQ][[1]]&@@#&?
मार्टिन

@ स्मार्टिन जो वृध्दि के साथ शुरू होने वाली वृत्तियों का हिसाब नहीं देता 0और @@#&बेमानी लगता है।
ngenisis

@ngenisis खेद - कि के लिए खाते में नहीं था
मार्टिन


2

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

करी सिंटैक्स के माध्यम से इनपुट लेता है, जैसे, (4)('12')

n=>(d,F=(i,P=j=>i%--j?P(j):1==j)=>P(i)&&`${i}`.match(`^[${d}]{${n}}$`)?i:F(i+1))=>F(2)

'use strict';

const G=n=>(d,F=(i,P=j=>i%--j?P(j):1==j)=>P(i)&&`${i}`.match(`^[${d}]{${n}}$`)?i:F(i+1))=>F(2)

const submit = () => {
  console.clear();
  console.log(G(+n.value)(d.value));
}

button.onclick = submit;
submit();
<input id="n" type="number" min="1" value="4" />
<input id="d" type="text" value="12" />
<button id="button">Submit</button>

सख्त मोड में चलाने के लिए ( टेल कॉल ऑप्टिमाइज़ेशन [TCO] के लिए )। यदि आपका पर्यावरण TCO का समर्थन नहीं करता है, तो यह पर्यावरण स्टैक की तुलना में बड़े अपराधों के लिए स्टैक ओवरफ्लो त्रुटि का परिणाम देगा।

अमान्य इनपुट के लिए यह हमेशा के लिए चलेगा।

ध्यान दें:

  • Chrome (> = 51) उपयोगकर्ता chrome://flags/#enable-javascript-harmonyइस ध्वज को TCO समर्थन के साथ उपरोक्त स्निपेट को चलाने में सक्षम कर सकते हैं ।
  • Safari (> = 10) TCO का समर्थन करता है

मुझे लगता है कि आप F=i=>(P=j=>i%--j?P(j):1==j)(i)&&...
बजे

@ETHproductions नहीं कर सकते क्योंकि इसे सख्त मोड में चलाना पड़ता है (स्टैक ओवरफ्लो से बचने के लिए) और इससे एक वैश्विक वैरिएबल P बनता है।
जॉर्ज रीथ

ओह, मुझे एहसास नहीं था कि TCO केवल सख्त मोड में लागू होता है।
ETHproductions

@ETHproductions Aye न तो मैंने तब तक नहीं किया जब तक मैंने कल्पना नहीं पढ़ी मैंने XD पोस्ट किया मेरे उत्तर के पहले भिन्नता ने उस शॉर्टकट का उपयोग किया जब तक मुझे एहसास नहीं हुआ कि यह अमान्य है।
जॉर्ज रीथ

2

MATL, 17 बाइट्स

wlwX"1GXNUStZp)l)

यह फ़ंक्शन दो इनपुट को स्वीकार करता है, एक पूर्णांक जो अंकों की संख्या और संभावित मानों को इंगित करने वाले एक चरित्र सरणी को निर्दिष्ट करता है। कोई primes के मामले में, एक त्रुटि दिखाई जाती है।

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

व्याख्या

        % Implicitly grab two inputs. First as an integer (N), second as a string (OPTS)
w       % Reverse the order of the inputs
l       % Push the literal 1 to the stack
w       % Pull N back to the top of the stack
X"      % Repeat OPTS N times 
1G      % Explicitly grab N again
XN      % Get all N-character combinations of the repeated version of OPTS
U       % Convert each row from a string to a number
S       % Sort them in ascending order
tZp)    % Grab only those that are primes
l)      % Retrieve the first prime
        % Implicitly print the result


2

ऋषि, 62 बाइट्स

lambda l,d:[p for p in primes(10^(l-1),10^l)if set(`p`)<=d][0]

फॉर्म का इनपुट लेता है: f( 4 , {'1','2'} )


1

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

->\n,@k {first *.is-prime&/^@k**{n}$/,^∞}

कोई समाधान मौजूद नहीं है, तो हमेशा के लिए चलता है।


इनपुट प्रारूप क्या है?
ओकेक्स

1
@ ओएक्सएक्स: यह एक लंबोदर है जो दो तर्क लेता है: एक नंबर एन, और एक सूची के।
SMLS

1

05AB1E , 17 बाइट्स

[¾Øмg¹QiS²Kg0Qiq

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

[¾Ø ¼             # Infinite loop over all primes
   Ð              # Push two extra copies on the stack
     g¹Qi         # If the length of this prime == the first input...
         S²K      # Push this prime without any of the digits in the second input
            g0Qi  # If the length of what remains is 0...
                q # quit
                  # implicitly print this prime

1

05AB1E , 22 19 18 बाइट्स (-1 @ रिले)

[NØ©S¹Kg0Q®g²Q&i®q

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

[                   # infinite loop.
 NØ©                # push nth prime.
    S¹Kg0Q          # see if, without banned digits, it's 0 length.
          ®g²Q&     # see if, it is originally also the length specified.
               i®q  # if true, print result and exit.

1
मुझे नहीं लगता कि आपको ,अंत में जरूरत है ।
रिले

@ अच्छी कॉल!
मैजिक ऑक्टोपस Urn

0

पर्ल 5, 77 बाइट्स

($n,$d)=@ARGV;/^[$d]{$n}$/&&("x"x$_)!~/^(..+?)\1+$/&&print&&die for 2..10**$n

इस तरह से चलाएं:

perl -le '($n,$d)=@ARGV;/^[$d]{$n}$/&&("x"x$_)!~/^(..+?)\1+$/&&print&&die for 2..10**$n' 4 12

0

रूबी, 77 76 बाइट्स

->n,l{(10**~-n..10**n).find{|n|(2...n).none?{|x|n%x<1}&&!n.to_s[/[^#{l}]/]}}

इनपुट प्रारूप: एक संख्या और एक स्ट्रिंग।

उदाहरण:

->n,l{...see above...} [6,"555555555515555555555"]
=> 115151

0

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

->\n,\k{first {.is-prime&&/.**{n}/},+«[X~] 0,|(k.unique.sort xx n)}

कोशिश करो

Nilअगर कोई ऐसा प्राइम न मिले तो रिटर्न ।

विस्तारित:

->
  \n, # number of digits
  \k  # list of digits
{

  first

    {
        .is-prime
      &&
        / . ** {n} / # exactly 「n」 digits ( in case 「k」 has a 0 )
    },

    \          # turn the following into a list of numbers

    [X[~]]       # cross the following with &infix:<~>

    0,           # append a 0 in case 「n」 was 1
    |(           # slip this list in (flatten)

        k        # the input list of possible digits
        .unique  # only one of each to reduce the search space (optional)
        .sort    # sort it so that the cross meta op returns them sorted

      xx         # list repeat

        n        # 「n」 times
    )
}

0

पायथन 2 + प्राइमफ़ैक , 91 85 बाइट्स

import primefac as P
n,k=input()
p=10**~-n
while set(`p`)!=k:p=P.nextprime(p)
print p

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

इनपुट की तरह है 4,{'1','2'}


1,{'1'}एक वैध इनपुट नहीं है (क्योंकि 1 अभाज्य नहीं है), इसलिए आप जो चाहें वहां कर सकते हैं।

अरे हाँ। धन्यवाद।
mbomb007

0

PHP, 82 बाइट्स

for($n=10**--$argv[1];$i-1||a&trim($n,$argv[2]);)for($i=++$n;--$i&&$n%$i;);echo$n;

कमांड लाइन तर्कों से एक संख्या और अंकों की एक स्ट्रिंग लेता है। साथ चलाना -nr

टूट - फूट

for($n=10**--$argv[1];  // $n = smallest number with (argument1) digits
    $i-1||                  // loop while $n is not prime or
    a&trim($n,$argv[2]);    // $n without all digits from (argument2) is not empty
)
    for($i=++$n;--$i&&$n%$i;);  // $i=largest divisor of $n smaller than $n (1 for primes)
echo$n;                 // print

0

जावा 7, 139 141 बाइट्स

long c(int a,String b){for(long n=2,i,x;;n++){for(x=n,i=2;i<x;x=x%i++<1?0:x);if(x>1&(n+"").length()==a&(n+"").matches("["+b+"]+"))return n;}}

इसके बाद के संस्करण 32-बिट नंबर का समर्थन करके 2 बाइट (बदल intकरने के लिए long)

इनपुट प्रारूप: एक पूर्णांक (यानी 4) और एक स्ट्रिंग (यानी "12")

स्पष्टीकरण:

long c(int a, String b){                  // Method with the two input parameters specified above
  for(long n = 2, i, x; ; n++){           // Loop from 2 going upwards
    for(x = n, i = 2; i < x; x = x % i++ < 1 ? 0 : x);  // Prime check for `n` 
    if (x > 1                             // if `n` is a prime (if `x` > 1 after the loop above it means `n` is a prime)
         & (n+"").length() == a           // AND if `n` has a length equal to the input integer
         & (n+"").matches("["+b+"]+")){   // AND if `n` only contains the specified digits of the input String (using a regex)
      return n;                           // Then we have our answer
    }
  }                                       // If no answer is available for the given input, it continues looping
}

टेस्ट कोड:

इसे यहाँ आज़माएँ।
नोट: दूसरा परीक्षण मामला अक्षम है क्योंकि यह बहुत लंबे समय तक चलता है।

class M{
  static long c(int a,String b){for(long n=2,i,x;;n++){for(x=n,i=2;i<x;x=x%i++<1?0:x);if(x>1&(n+"").length()==a&(n+"").matches("["+b+"]+"))return n;}}

  public static void main(String[] a){
    System.out.println(c(4, "12"));
    //System.out.println(c(10, "047"));
    System.out.println(c(6, "555555555515555555555"));
  }
}

आउटपुट:

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