প্রদত্ত ব্যাপ্তির মধ্যে প্রাইমের যোগফল


27

aএবং b(অন্তর্ভুক্ত) এর মধ্যে প্রাইমের যোগফলের জন্য সংক্ষিপ্ততম কোডটি লিখুন ।

ইনপুট

  1. aএবং bকমান্ড লাইন বা স্টিডিন থেকে নেওয়া যেতে পারে (স্থান বিচ্ছিন্ন)
  2. ধরুন 1 <= a <= b <=10 8

আউটপুট কেবল একটি নিউলাইন চরিত্রের সাথে যোগফলটি মুদ্রণ করুন।

বোনাস পয়েন্ট

  1. প্রোগ্রামটি যদি একাধিক ব্যাপ্তিকে গ্রহণ করে (প্রতিটি লাইনে একটি যোগফল মুদ্রণ করে), আপনি অতিরিক্ত পয়েন্ট পাবেন। :)

উপরের সীমাটি অনেক আকর্ষণীয় সমাধানের অনুমতি দেওয়ার জন্য খুব বড় (যদি তাদের যুক্তিসঙ্গত সময়ে শেষ করতে হয়, তবে কমপক্ষে)।
হলভাবো

আপনি কি অকার্যকর সমাধান আকর্ষণীয় মনে করেন?
ম্যাথু

@ হালভাবো, ঠিক আছে। আমি মনে করি না যে কারও একটি অযৌক্তিক সমাধানের বিষয়টি বিবেচনা করে। অন্যের আপত্তি থাকলে, আমি সীমাটি কমিয়ে আনতে আরও বেশি খুশি
হব

1 থেকে 10 ^ 8 ব্যবহার করে সবেমাত্র # # তে প্রোগ্রামটির খুব অনুকূলিত বা সংক্ষিপ্ত সংস্করণটি তৈরি এবং চালানো হয়েছে। আমার অ্যালগরিদমকে সঠিক বলে ধরে নিলে এটি 1 মি 30 এর অধীনে চলেছে, এবং দীর্ঘকাল থেকে উপচে পড়েনি। আমার কাছে সূক্ষ্ম ওপরের সীমা মনে হচ্ছে!
নেলিয়াস

একটি দ্রুত সহজ চেক: 1 এবং 100 = 1060 এর মধ্যে প্রাইমের যোগফল
নেলিয়াস

উত্তর:


15

J, 41 32 19 টি অক্ষর:

হালনাগাদ

(সরল চালনি)

g=:+/@(*1&p:)@-.&i.

যেমন

100 g 1
1060
250000x g 48
2623030823

আগে

h=:3 :'+/p:i.(_1 p:>:y)'
f=:-&h<:

উদাহরণ:

100 f 1
1060

11

গাণিতিক 7 (সরল পাঠ্য 31 অক্ষর)

যদি প্যারি / জিপি সমাধান অনুমোদিত হয় তবে:

Plus@@Select[Range[a,b],PrimeQ]

তোমার লক্ষ্যটা কি? প্যারি / জিপি এবং ম্যাথমেটিকা ​​দুর্দান্ত প্রোগ্রামিং ভাষা।
এলেভেক্স

@ ইলেভেক্স, না, তারা গল্ফের একটি নিয়ম ভঙ্গ করে : অন্তর্নির্মিত নির্দিষ্ট হাইলেভেল ফাংশন ব্যবহার করে
নাকিলন

আমার মনে হয় না এরকম নিয়ম আছে । হাইলেভেল ফাংশনগুলি কখন ব্যবহার করা যায় এটি এখনও একটি মুক্ত বিষয়। প্রাক্তন জন্য দেখুন। এই মেটা প্রশ্ন
এলেভেক্স

1
28 অক্ষর Range[a,b]~Select~PrimeQ//Tr
ছায়ানগ

6

সি (এনএল সহ ১১7)

main(a,b,s,j){
s=0,scanf("%d%d",&a,&b);
for(a+=a==1;a<=b;a++)
for(s+=a,j=2;j<a;)
s-=a%j++?0:(j=a);
printf("%d",s);
}

5

সি # (294 টি অক্ষর):

using System;class P{static void Main(){int a=int.Parse(Console.ReadLine()),b=int.Parse(Console.ReadLine());long t=0;for(int i=a;i<=b;i++)if(p(i))t+=i;Console.WriteLine(t);}static bool p(int n){if((n%2<1&&n!=2)||n<2)return 0>1;for(int i=3;i<=Math.Sqrt(n);i+=2)if(n%i==0)return 0>1;return 1>0;}}

আপনি আপনার সমস্ত করতে পারেন intগুলি longএবং কয়েক অক্ষর সংরক্ষণ করুন: long a=...,b=...,t=0,i=a;for(;i<=b;i++)। এটি এটি ২৮৮ টি অক্ষরে পরিণত হয়। আপনি pএকটি দীর্ঘ প্রত্যাবর্তন করতে পারেন এবং কেবল ফেরত দিতে পারেন 0বা nলুপটি ছোট করতে পারেন t+=p(i)। 277 অক্ষর, তারপর।
জো

5

প্যারি / জিপি (৪৪ টি অক্ষর)

sum(x=nextprime(a),precprime(b),x*isprime(x))

6
ভোটারদের কি তাদের -1 এর জন্য কোনও কারণ দেওয়া উচিত নয়?
এলেভেক্স

ডাউনভোটটি সম্ভবত বিল্ট-ইনগুলি ব্যবহারের জন্য ছিল।
mbomb007

4

বেস শেল

47 অক্ষর

seq 1 100|factor|awk 'NF==2{s+=$2}END{print s}'

সম্পাদনা: স্রেফ ওভারফ্লোগুলি বুঝতে পেরেছিল এবং ডাবল হিসাবে জোর করে।

52 50 টি অক্ষর

এখানে কিছুটা দীর্ঘ সমাধান, তবে ওভারফ্লোগুলি পাশাপাশি পরিচালনা করে

seq 1 100|factor|awk NF==2{print\$2}|paste -sd+|bc

টি পেস্টের চেয়ে ছোট, এবং আপনি একক উদ্ধৃতি মুছতে পারেন (পালাতে $)।
নবিব

@ ন্যাব, আমি * নিক্স বাক্সে আমার হাত পাওয়ার সাথে সাথেই এটি ঠিক করে ফেলব, অথবা আপনি অনার্স করতে পারবেন।
st0le

@ ন্যাব, এটি কাজ করতে পারে না, trশেষে '+' পেছনের যোগ করে , এটি ঠিক করা আরও চরিত্র গ্রহণ করবে।
st0le

আহ, মিস করলাম। যদিও আমি মনে করি আপনি আরও awk NF==2{print\$2}দীর্ঘ সমাধানের জন্য বাইট সংরক্ষণ করতে এখনও পরিবর্তন করতে পারবেন (কোন ঘটনাক্রমে আমরা ব্রেস প্রসারণ করতে পারব না কারণ সেখানে কোন কমা বা ..এস নেই)।
ন্যাব

@ নাব, আপনি ঠিক বলেছেন সম্পন্ন হয়েছে :)
st0le

4

সি #, 183 টি অক্ষর

using System;class P{static void Main(string[] a){long s=0,i=Math.Max(int.Parse(a[0]),2),j;for(;i<=int.Parse(a[1]);s+=i++)for(j=2;j<i;)if(i%j++==0){s-=i;break;}Console.WriteLine(s);}}

এটি যদি 1 টি পরীক্ষা না করে বা এর থেকে আরও ভাল উপায় থাকে তবে আরও সংক্ষিপ্ত হবে ... আরও পঠনযোগ্য ফর্ম্যাটে:

using System;
class P 
{ 
    static void Main(string[] a) 
    { 
        long s = 0,
             i = Math.Max(int.Parse(a[0]),2),
             j;

        for (; i <= int.Parse(a[1]);s+=i++)
            for (j = 2; j < i; )
                if (i % j++ == 0)
                {
                    s -= i;
                    break;
                }

        Console.WriteLine(s); 
    }
}

আমি এটি কত সংক্ষিপ্ত তা পছন্দ করি তবে আমি অবাক করে দেখি যে 10 ^ 8 অবধি গণনা করার সময় এটি কতটা অদক্ষ হবে!
নেলিয়াস

সত্য, তবে দক্ষতা নিয়মে ছিল না!
নিক লারসেন

আপনি সংকলকটি সংখ্যার সাথে 0 থেকে ডিফল্ট জানেন? এটি আপনাকে সেখানে আরও
কয়েকটা

এটি ছাড়াই সংকলন করার সময় ত্রুটি দেয়
নিক লারসেন

... কারণ এটি ব্যবহারের আগে এটি কখনই বরাদ্দ করা হয় না ( s -= i;কারণ এটি কেবল সিনট্যাকটিক চিনি s = s - i;যার জন্য sএটি সেট করার আগে অ্যাক্সেসের চেষ্টা করে)
নিক লারসেন

3

হাস্কেল (৮০)

c=u[2..];u(p:xs)=p:u[x|x<-xs,x`mod`p>0];s a b=(sum.filter(>=a).takeWhile(<=b))c

s 1 100 == 1060


এটি কোড-গল্ফ! আপনি কেন আপনার স্টাফের জন্য এত দীর্ঘ নাম ব্যবহার করেন?
FUZxxl

4
সি, ইউ, এস এর চেয়ে ছোট নাম খুঁজে পাওয়া শক্ত ... বাকী ভাষা স্ট্যান্ডার্ড লাইব্রেরি।
জেবি

3

রুবি ১.৯, rs৩ টি চর

require'prime';p=->a,b{Prime.each(b).select{|x|x>a}.inject(:+)}

এই মত ব্যবহার করুন

p[1,100] #=> 1060

Primeশ্রেণিটি ব্যবহার করে প্রতারণার মতো মনে হয়, তবে যেহেতু গাণিতিক সমাধানগুলি অন্তর্নির্মিত প্রধান কার্যাদি ব্যবহার করে ...


3

পার্ল, 62 টি অক্ষর

<>=~/\d+/;map$s+=$_*(1x$_)!~/^1$|(^11+)\1+$/,$&..$';print$s,$/

এই একটি প্রাইম নম্বর রেজেেক্স ব্যবহার করে।


3

সাধারণ টাস্ক (পাইথন 3): 95 টি অক্ষর

a,b=map(int,input().split())
r=range
print(sum(1%i*all(i%j for j in r(2,i))*i for i in r(a,b+1)))

বোনাস টাস্ক (পাইথন 3): 119 টি অক্ষর

L=iter(map(int,input().split()))
r=range
for a,b in zip(L,L):print(sum(1%i*all(i%j for j in r(2,i))*i for i in r(a,b+1)))

3

পরী / জিপি (24 টি অক্ষর)

s=0;forprime(i=a,b,s+=i)

কিছু অন্যান্য সমাধানের মতো এটি কঠোরভাবে প্রয়োজনীয়তা, যেমন পূরণ করতে পারছে না aএবং bstdin বা কমান্ড লাইন থেকে পড়া নেই। আমি ভেবেছিলাম এটি অন্যান্য পারী / জিপি এবং ম্যাথমেটিকা ​​সমাধানগুলির একটি দুর্দান্ত বিকল্প।


1
+1: গল্ফ না করেও আমি আসলে এটি করি।
চার্লস

2

সাধারণ লিস্প: (107 টি অক্ষর)

(flet((p(i)(loop for j from 2 below i never (= (mod i j) 0))))(loop for x from(read)to(read)when(p x)sum x))

কেবল পয়েন্ট> = 1 শুরু করার জন্য কাজ করে


2

এপিএল (25 টি অক্ষর)

+/((R≥⎕)^~R∊R∘.×R)/R←1↓⍳⎕

এটি এপিএলে প্রাইমগুলির তালিকা তৈরির জন্য একটি সুপরিচিত আইডিয়াম ( ব্যাখ্যাটির জন্য এই পৃষ্ঠাটি দেখুন ) এর একটি পরিবর্তন ification

উদাহরণ:

      +/((R≥⎕)^~R∊R∘.×R)/R←1↓⍳⎕
⎕:
      100
⎕:
      1
1060

2

ফ্যাক্টর -> 98

:: s ( a b -- n )
:: i ( n -- ? )
n 1 - 2 [a,b] [ n swap mod 0 > ] all? ;
a b [a,b] [ i ] filter sum ;

আউটপুট:

( scratchpad ) 100 1000 s

--- Data stack:
75067

2

আর, 57 টি অক্ষর

a=scan();b=a[1]:a[2];sum(b[rowSums(!outer(b,b,`%%`))==2])

নির্দিষ্টকরণ কি n=2প্রয়োজনীয় scan()? যদি ইনপুটটি মানসম্মত হয় তবে আর্গুমেন্টটি বাদ দিয়ে কোনও অতিরিক্ত <enter> প্রয়োজন মনে করে কোনও সমস্যা আছে কি?
গাফি

1
আসলে আপনি ঠিক না আমি ছাড়া করতে পারে। এটি
নিখুঁতভাবে

ঠিক আছে, আমার কাছ থেকেও +1 একই, কারণ এটি অবশ্যই দীর্ঘতম নয়।
গাফি

2

জাপটে স্বাগতম
শেগি

@ শেগি আমি প্রথমে জাপটে একটি "প্রাইম রেঞ্জ" অন্তর্নির্মিত সন্ধান করার চেষ্টা করেছি, কিন্তু তারপরে এই চ্যালেঞ্জটি গ্রহণ করার সিদ্ধান্ত নিয়েছি: পি
এরিক দ্য আউটগল্ফার

প্রাইমগুলির সাথে সম্পর্কিত কতগুলি চ্যালেঞ্জ রয়েছে তা প্রদত্ত, একটি শর্টকাটটি কার্যকর fj<space>হতে পারে।
শেগি

1

পার্ল, 103 অক্ষর

while(<>){($a,$b)=split/ /;for($a..$b){next if$_==1;for$n(2..$_-1){$_=0if$_%$n==0}$t+=$_;}print"$t\n";}

এটি একাধিক স্পেস বিচ্ছিন্ন লাইন গ্রহণ করবে এবং প্রত্যেকটির উত্তর দেবে: ডি


1

প্রশ্নে (95):

d:{sum s:{if[2=x;:x];if[1=x;:0];$[0=x mod 2;0;0=min x mod 2+til floor sqrt x;0;x]}each x+til y}

নমুনা ব্যবহার:

q)d[1;100]
1060

1

সি # 302

using System;namespace X{class B{static void Main(){long x=long.Parse(Console.ReadLine()),y=long.Parse(Console.ReadLine()),r=0;for(long i=x;i<=y;i++){if(I(i)){r+=i;}}Console.WriteLine(r);}static bool I(long n){bool b=true;if(n==1){b=false;}for(long i=2;i<n;++i){if(n%i==0){b=false;break;}}return b;}}}

1

গণিত , 27

পূর্বনির্ধারিত aএবং b:

a~Range~b~Select~PrimeQ//Tr

একটি ফাংশন হিসাবে (এছাড়াও 27):

Tr[Range@##~Select~PrimeQ]&

1

আর (85 টি অক্ষর)

x=scan(nmax=2);sum(sapply(x[1]:x[2],function(n)if(n==2||all(n %% 2:(n-1)))n else 0))

চরম অদক্ষ! আমি নিশ্চিত যে এটি O (n ^ 2) সময় নেয়। এটি একটি যৌক্তিকের উপর দ্বিগুণ চাপ দেওয়ার বিষয়ে সতর্কতা দিতে পারে।

Deobfuscated:

x <- scan(nmax=2)
start <- x[1]
end <- x[2]

#this function returns n if n is prime, otherwise it returns 0.
return.prime <- function(n) {
  # if n is 2, n is prime. Otherwise, if, for each number y between 2 and n, n mod y is 0, then n must be prime
  is.prime <- n==2 || all(n%% 2:(n-1))
  if (is.prime)
    n
  else
    0
} 
primes <- sapply(start:end, return.prime)
sum(primes)

1

পাইথন ৩.১ (১৫৩ টি চর):

from sys import*
p=[]
for i in range(int(argv[1]),int(argv[2])):
 r=1
 for j in range(2,int(argv[2])):
  if i%j==0and i!=j:r=0
 if r:p+=[i]
print(sum(p))

1. from sys import*2. r=True-> r=1(এবং যথাক্রমে 0জন্য False) 3. if i%j==0and i!=j:r=04. if r:p+=[i]5. print(sum(p))(শেষ 4 লাইন প্রতিস্থাপন)
21 ই

আপনি input()খাটো হতে ব্যবহার করতে পারেন । এছাড়াও, আপনি if i%j<1andপরিবর্তে ব্যবহার করতে পারেন ?
mbomb007



0

পাইথন: 110 টি অক্ষর

l,h=map(int,raw_input().split())
print sum(filter(lambda p:p!=1 and all(p%i for i in range(2,p)),range(l,h)))

এটি অন্তর্ভুক্ত নয়।
জামিলাক

0

পাইথন, 133

সামান্য বিদ্রূপ:

x,y=map(int,raw_input().split())
y+=1
a=range(y)
print sum(i for i in[[i for a[::i]in[([0]*y)[::i]]][0]for i in a[2:]if a[i]]if i>=x)

-1 (ভাল আমার কাছে ডাউনওয়েট করার জন্য এখনও পর্যাপ্ত রেপ নেই) এটি পাইথন 2 বা 3 এ অবৈধ, আপনি ইনপুটটি আপনার পক্ষে সুবিধামত উদ্ধৃতি চিহ্ন ধারণ করতে পারবেন না। কাঁচা_পিন্টে পরিবর্তন করুন বা পাইথন 3 প্লিজ ব্যবহার করুন
জামিলাক

আপনি অপসারণ করতে পারেন y+=1এবং এর পরিবর্তে ব্যবহার range(y+1)এবং ([0]*-~y)[::i](সম্পর্কে newline সরানোর) একটি বাইট সংরক্ষণ করুন। এবং পাইথন 3 ব্যবহার করা আপনাকে ব্যবহার করার অনুমতি দেবে input(), যতক্ষণ আপনি পরে বন্ধনী স্থাপন করবেন print, অতএব 4 বাইট অপসারণ করুন, তবে 1 যুক্ত করুন it
mbomb007

0

১৩৩ টি চর, লুয়া (প্রাইম ইন-বিল্ট ফাংশন নেই)

for i=m,n,1 do
if i%2~=0 and i%3~=0 and i%5~=0 and i%7~=0 and i%11~=0 then
s=s+1
end
end
print(s)

এখানে পাওয়া একটি উদাহরণ যেখানে আমি পাওয়া সমস্ত প্রাইমগুলি এবং তার শেষে যোগফলটি প্রদর্শন করতে "মুদ্রণ (i)" রেখাটি যুক্ত করেছি: http://codepad.org/afUvYHnm


"ক এবং বি কমান্ড লাইন বা স্টিডিন থেকে নেওয়া যেতে পারে" এই দুটি উপায়ের মধ্যে কোনটি আপনার কোডে পাস করা যেতে পারে?
manatwork

1
এই ১৩ অনুসারে (এটির কিছুও) মুখ্য সংখ্যা নয়।
st0le

@ st0le যুক্তি অনুসারে 13 একটি "প্রধান" (তবে উদাহরণ 2 নয়) - অন্যদিকে 13 * 13 = 169 আবার "প্রধান" ...
হাওয়ার্ড

0

পাওয়ারশেল - 94

$a,$b=$args[0,1]
(.{$p=2..$b
while($p){$p[0];$p=@($p|?{$_%$p[0]})}}|
?{$_-gt$a}|
measure -s).sum

0

এফ # (141)

কোডের এক তৃতীয়াংশ ইনপুট পার্সিংয়ের জন্য।

let[|a;b|]=System.Console.ReadLine().Split(' ')
{int a..int b}|>Seq.filter(fun n->n>1&&Seq.forall((%)n>>(<>)0){2..n-1})|>Seq.sum|>printfn"%A"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.