কাছাকাছি প্রাইমস আউটপুট


9

এমন একটি প্রোগ্রাম লিখুন যা কোনও ইনপুট নেয় (যা প্রধান হতে পারে বা নাও হতে পারে), এবং তাৎক্ষণিক প্রধানমন্ত্রীকে নিম্নলিখিত এবং তার পূর্ববর্তী তালিকাভুক্ত করে।

উদাহরণ ইনপুট:

1259

উদাহরণ আউটপুট:

1249 1277

সংক্ষিপ্ততম প্রোগ্রামের জয়। একটি আধুনিক ডেস্কটপ পিসিতে 10 সেকেন্ডের মধ্যে কার্যকর করতে হবে। ইনপুটগুলি সর্বোচ্চ 10,000 টি সীমাবদ্ধ থাকবে।


2
সম্ভাব্য ইনপুটগুলির পরিসীমাও সীমাবদ্ধ না করে কোনও সময়ের সীমা তালিকাবদ্ধ করা কিছুটা অদ্ভুত বলে মনে হয়। আমাদের কি দশ সেকেন্ডের মধ্যে কয়েক হাজার-অঙ্কের প্রাইমগুলি পাওয়া দরকার?
আনন

@Anon। ধরে নিন আমি হাস্যকর ইনপুট দেব না তবে প্রোগ্রামটি কিছুটা অপ্টিমাইজ করতে হবে। আমি প্রশ্নের পাঠ্য স্পষ্ট করে দিয়েছি।
টমাস ও

আমার ওয়ান-লাইনারটি সর্বোত্তম ছাড়াও কিছু, তবে এটি 10000 এর ইনপুটটির জন্য ~ 1s এ চলে 10 10 সেকেন্ডের দরকার পড়তে আপনাকে খুব চেষ্টা করতে হবে।
নিনজালজ

@ নিনজালজ একেবারে ভয়াবহ অ্যালগরিদমগুলি ছড়িয়ে দেওয়ার জন্য।
থমাস হে

3
সুতরাং আপনি লম্বা nস্ট্রিং nঅক্ষর তৈরি করে এবং কোনও রেইজেক্সের বিরুদ্ধে একেবারে ভয়াবহরূপে পরীক্ষা করে প্রাথমিকতার জন্য কোনও সংখ্যার পরীক্ষা করা বিবেচনা করেন না ?
নিনজালজ

উত্তর:


6

পার্ল 5.10 (পার্ল-ই), 65 টি অক্ষর

অর্ধ theণের (কমপক্ষে) @ জে বিতে যাওয়া উচিত

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

চমৎকার! প্রাইম টেস্ট রেগেক্স!
মিং-টাং

হ্যাঁ, আমি এটি সম্পর্কে স্ট্যাকওভারফ্লো
Qestions/

দেখে মনে হচ্ছে আপনি একটি উদ্ধৃত রেইগেক্সের সাথে কয়েকটি অক্ষর সংরক্ষণ করতে পারেন ( qrপরে ডিলিমিটরের প্রয়োজন না হওয়ার জন্য -2 , -4)।
আনন

আসলে, এটি ছাড়া কাজ করে qr। এলএমজিটিএফওয়াই: 81 টি অক্ষর$m=$n=<>;$p='^1$|(^11+)\1+$';0while(1x--$m)=~$p;0while(1x++$n)=~$p;print"$m $n$/"
জেবি

দ্বিতীয় রাউন্ড, উভয় প্যাটার্ন ম্যাচ ফ্যাক্টরিং (cha 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 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+23 টি অক্ষর সাশ্রয় করে ... আমি মনে করি।
st0le

এবং হয়ত আপনি প্রতিস্থাপন করতে পারেন not(all(...))দ্বারা any(...)Booleans reversing
st0le

আপনি নতুন লাইন গণনা করেন না। আসল গণনা হচ্ছে 108
JPvdMerwe

1
এছাড়াও, দয়া করে আপনার অক্ষর গণনায় নতুন লাইন গণনা করুন। অন্যকে ধোঁকা দেওয়ার জন্য।
মoinনুদিন


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

পাইথন, 116 139 টি অক্ষর (ডাবল ইনডেন্টটি ট্যাব-চর হয়)

ইরোটোথিনিস এর ভাল ওলি চালুন ব্যবহার করে

সম্পাদনা এবং (একটি টন @ জেপিভিডিমারউ ধন্যবাদ)। এখন 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 NECESSARY সাদা স্থান গণনা না করার জন্য।
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 3 থেকে 10.000 পর্যন্ত সমস্ত 9998 ইনট চালাবে



1

সুইফট 190 187 185 110

কোড-গল্ফে সুইফটটি খুব খারাপ, তবে আমি এটি যেভাবেই চেষ্টা করেছিলাম: ডি
এটি আরও খাটো এবং খাটো হচ্ছে ... ( 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)}

অনেক পুনর্গঠন সহ -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; কোড গল্ফ চেতনা বিরুদ্ধে।
টমাস ও

@ জেপিভি: হু এটা ভুল ছিল । আমি কিভাবে যে কি আশ্চর্য.
জন

@ থমাস, @ জেপিভি: আমি আমদানি ছাড়াই একটি আপডেট সংস্করণ পোস্ট করেছি।
জন



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 বা তার চেয়ে কম হয়, সেই ক্ষেত্রে আউটপুট যাইহোক নির্ধারিত হবে would

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.