Primes के पास आउटपुट


9

एक प्रोग्राम लिखें जो एक इनपुट लेता है (जो कि प्राइम हो सकता है या नहीं भी हो सकता है), और इसके बाद के प्राइम को सूचीबद्ध करता है।

उदाहरण इनपुट:

1259

उदाहरण आउटपुट:

1249 1277

सबसे छोटा कार्यक्रम जीतता है। एक आधुनिक डेस्कटॉप पीसी पर 10 सेकंड के भीतर निष्पादित करना होगा। इनपुट अधिकतम 10,000 तक सीमित होंगे।


2
संभव इनपुट की सीमा को सीमित किए बिना समय सीमा को सूचीबद्ध करना कुछ हद तक अजीब लगता है। क्या हमें दस सेकंड के भीतर कई-हज़ार अंकों के प्राइम खोजने की आवश्यकता है?
आनन।

@Anon। मान लें कि मैं हास्यास्पद इनपुट नहीं दूंगा, लेकिन कार्यक्रम को कुछ हद तक अनुकूलित होना चाहिए। मैंने प्रश्न पाठ को स्पष्ट कर दिया है।
थॉमस ओ

मेरा वन-लाइनर कुछ भी है लेकिन इष्टतम है, लेकिन यह 10000 के इनपुट के लिए ~ 1s में चलता है। आपको 10s की आवश्यकता के लिए वास्तव में कठिन प्रयास करना होगा।
नंजलज

@njjalj बस बिल्कुल भयानक एल्गोरिदम को मात देने के लिए।
थॉमस ओ

3
तो आप nएक स्ट्रिंग nपात्रों को लंबे समय तक बनाकर परीक्षण के लिए एक संख्या का परीक्षण करने पर विचार नहीं करते हैं और परीक्षण करते हैं कि एक रेक्सक्स बिल्कुल भयानक है?
नवजाल

जवाबों:


6

पर्ल 5.10 (पर्ल-ई), 65 वर्ण

आधा क्रेडिट (कम से कम) @ जे बी को जाना चाहिए।

$m=<>;for(-1,1){$n=$m;0while(1x($n+=$_))=~/^1$|(^11+)\1+$/;say$n}

अच्छा! प्रधानमंत्री परीक्षण regex!
मिंग-तांग

हाँ, मैं इसे के बारे में सीखा stackoverflow.com/questions/3543811/code-golf-happy-primes
ninjalj

ऐसा लगता है कि आप एक उद्धृत रेगेक्स (-4 के लिए +2 qr, -4 के बाद के सीमांकक की आवश्यकता नहीं है) के साथ कुछ पात्रों को बचा सकते हैं ।
आनन।

वास्तव में, यह बिना काम करता है qr। LMGTFY: 81 वर्ण$m=$n=<>;$p='^1$|(^11+)\1+$';0while(1x--$m)=~$p;0while(1x++$n)=~$p;print"$m $n$/"
जेबी

दूसरा राउंड, दोनों पैटर्न मैच (66 वर्ण) फैक्टरिंग:perl -E'$m=<>;for(-1,1){$n=$m;0while(1x($n+=$_))=~q<^1$|(^11+)\1+$>;say$n}'
जेबी



3

अजगर - 93

FR0DDY द्वारा उत्तर के आधार पर । मैंने मूल रूप से एक अलग विधि का उपयोग करके लाइनों 4 और 5, और छोटी लाइन 2 को मर्ज कर दिया है।

n=input()-1
m=n+2
f=lambda n:any(n%x<1for x in range(2,n))
exec"n-=f(n);m+=f(m);"*m
print n,m

2

पायथन 116 111 111 109 वर्ण

n=input()-1
m=n+2
f=lambda n:any(pow(b,n-1,n)>1for b in(3,5,7,13))
while f(n):n-=1
while f(m):m+=1
print n,m

1
उपयोगf=lambda n:not(all(pow(b,n-1,n)<2for b in(3,5,7,13)))
st0le

@ fR0DDY, पहली 3 लाइनों के बजाय n=input()-1और m=n+2, 3 वर्ण बचाता है ... मुझे लगता है।
13:01 पर

और हो सकता है कि आप बूलियन्स not(all(...))को any(...)उलट कर बदल सकते हैं
st0le

आप नई लाइनों की गिनती नहीं करते हैं। वास्तविक गणना है 108
JPvdMerwe

1
इसके अलावा, कृपया अपने चरित्र की गणना में नई संख्याएँ गिनें। -1 दूसरों को धोखा देने के लिए।
मोइनुद्दीन


1

हास्केल: 99

s(z:y)=z:s[x|x<-y,mod x z>0];f(x:y:z:w)=(x,z):f(y:z:w);p x=(head.filter(\(c,v)->c<x&&v>x).f.s)[2..]

उदाहरण

Main> p 1259
(1249,1277)

1

पायथन, ११६ १३ ९ चार्ट (डबल इंडेंट टैब-चार है)

Eratosthenes के अच्छे ole चलनी का उपयोग करता है

संपादन और (एक TON @JPvdMerwe धन्यवाद)। अब primes के साथ काम करना चाहिए।

l=n=input();a=range(n*2)
for i in a[2:]:a=[k for k in a if k==i or k%i]
for g in a:
 if g>n:print l,g;break
 if i!=n:l=g

मूल

a=range(9999)
j=lambda a,n:[i for i in a if i==n or i%n]
for i in a[2:]:a=j(a,i)
o=n=input();
for i in a:
 if o<n and i>n: 
  print o,i
 o=i

-1 आवश्यक नहीं है कि सफेद जगह खाली हो।
JPvdMerwe

@JPvdMerwe मेरी गलती है, मैं यहां नया हूं, और मुझे एहसास हुआ कि मैंने अपने संपादक से गलत मीट्रिक का उपयोग किया होगा।
डॉग टी।

@JPvDMerwe भी संपादन पर मदद के लिए धन्यवाद
डॉग टी।

@ डग शांत सब लोग गलती करते हैं :) +1 मेरे डाउन वोट को उलटने के लिए, बस अगली बार सुनिश्चित करें।
JPvdMerwe

एक चाल जो आप कर सकते हैं वह है पंक्ति 4 से नीचे की रेखाओं को 1-3 पर ले जाना और उसके a=range(9999)साथ प्रतिस्थापित करना a=range(n)। इसके अलावा लाइन 2 में आपको aलंबोदर के पास जाने की जरूरत नहीं है , आप इसका इस्तेमाल कर सकते हैं। यह बहुत दूर दाढ़ी चाहिए।
JPvdMerwe

1

स्केल 119:

def p(n:Int)=(2 to n-1).exists(n%_==0)
def i(n:Int,v:Int):Int=if(!p(n+v))n+v else i(n+v,v)
Seq(-1,1).map(i(readInt,_))

ungolfed:

def notPrime (n:Int) = 
    (2 to n-1).exists (n % _ == 0)

def itPrime (n: Int, vector:Int) : Int =
    if (! notPrime (n+vector)) n+vector
    else itPrime (n+vector, vector)

def nearbyPrime (value: Int) =
    Seq (-1, 1).map (sign => itPrime (value, sign))

21.2s को सभी 9998 इनट्स को 3 से 10.000 तक चलाना है



1

स्विफ्ट 190 187 185 110

स्विफ्ट कोड-गोल्फ में बहुत खराब है, लेकिन मैंने इसे वैसे भी आज़माया: D
यह छोटा और छोटा हो रहा है ... ( 75 बाइट्स निकालने के लिए @HermanLauenstein का धन्यवाद )

var a=Int(readLine()!)!;for b in[-1,1]{var n=a,c=0;while c<1{n+=b;c=1;for i in 2..<n{if n%i<1{c=0}}};print(n)}

बहुत सारे पुनर्गठन के साथ -75 बाइट्स var a=Int(readLine()!)!;for b in[-1,1]{var n=a,c=0;while c<1{n+=b;c=1;for i in 2..<n{if n%i<1{c=0}}};print(n)}(मैंने इसे अभी तक ठीक से परीक्षण नहीं किया है)
हरमन एल

धन्यवाद @ हर्मनलॉइनस्टीन यह मेरा पहला कोड-गोल्फ है, इसलिए मुझे हर मदद की ज़रूरत है :)
जोसेफ़ ज़ोलर

0

पायथन (123)

import Primes as p
j=i=int(input())
n=p.primes(i*2)
while not i in n[:]:
 i+=1
print(i)
while not j in n[:]:
 j-=1
print(j)

नोट: Primesमॉड्यूल मेरे द्वारा लिखा गया था, लेकिन यह प्रश्न पूछे जाने से पहले मौजूद था। यह इसके लिए नहीं लिखा गया था। फिर भी, यह अनुचित समझा गया था, इसलिए यहां अद्यतन संस्करण है।

अजगर (215)

j=i=int(input())
import math as m
s=list(range(i*2))
for n in s[:]:
 for l in range(1,int(m.ceil(m.sqrt(n)))):
  if(n%l)==0and l!=1and n in s:s.remove(n)
while not i in s:i+=1
print(i)
while not j in s:j-=1
print(j)

मुझे नहीं पता कि आप अपनी गिनती गलत कैसे कर पाए लेकिन यह वास्तव में है:123
JPvdMerwe

इसके अलावा, @ जॉन जब तक मॉड्यूल अब भाषा का हिस्सा नहीं है, निष्पक्षता के हित में आपको कोड शामिल करना चाहिए। लेकिन ईमानदारी पर कुदोस।
JPvdMerwe

मुझे लगता है कि इसका उपयोग करने के लिए धोखा है Primes; कोड गोल्फ की भावना के खिलाफ।
थॉमस ओ

@ जेपीवी: हुह। यह गलत था । मुझे आश्चर्य है कि यह कैसे हुआ।
जॉन

@Thomas, @JPv: मैंने आयात के बिना एक अद्यतन संस्करण पोस्ट किया है।
जॉन



0

सी (जीसीसी) , 98 बाइट्स

p(n,i){for(i=2;i<n;)n=n%i++?n:0;i=n;}g(n,d){for(;!p(n+=d););printf("%d ",n);}f(n){g(n,-1);g(n,1);}

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

पूर्ण कार्यक्रम संस्करण, सी (जीसीसी) , 116 बाइट्स

p(n,i){for(i=2;i<n;)n=n%i++?n:0;i=n;}g(n,d){for(;!p(n+=d););printf("%d ",n);}main(n){scanf("%d",&n);g(n,-1);g(n,1);}

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

दोनों संस्करण मानते हैं कि हम 1 को कभी भी परीक्षण नहीं करते हैं, जो केवल तब होता है जब इनपुट 2 या उससे कम होता है, इस मामले में आउटपुट वैसे भी अपरिभाषित होगा।

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