दी गई सीमा के बीच के अपराधों का योग


27

aऔर b(सम्मिलित) के बीच के अपराधों का योग खोजने के लिए सबसे छोटा कोड लिखें ।

इनपुट

  1. aऔर bकमांड लाइन या स्टडिन से लिया जा सकता है (अंतरिक्ष अलग)
  2. मान लें 1 <= a <= b <=10 8

आउटपुट बस एक नई लाइन वर्ण के साथ राशि प्रिंट करें।

बोनस अंक

  1. यदि प्रोग्राम कई श्रेणियों को स्वीकार करता है (प्रत्येक पंक्ति पर एक राशि प्रिंट करें), तो आपको अतिरिक्त अंक मिलते हैं। :)

कई दिलचस्प समाधानों की अनुमति देने के लिए ऊपरी सीमा बहुत बड़ी है (यदि उन्हें उचित समय में पूरा करना है, तो कम से कम)।
हॉलवबो २ hall

@hallvabo आपको अकुशल समाधान दिलचस्प लगते हैं?
मत्ती

@ हलावबो, यह ठीक है। मुझे नहीं लगता कि किसी को भी एक अप्रभावी समाधान का दिमाग है। यदि अन्य वस्तु, मैं सीमा को कम करने के लिए खुश से अधिक हो जाएगा
st0le

बस # 1 से 10 ^ 8 का उपयोग करके C # में प्रोग्राम का एक बहुत ही अनुकूलित या संक्षिप्त संस्करण नहीं बनाया गया। मेरे एल्गोरिथ्म को सही मानते हुए, यह 1m30s से कम में चला गया, और एक लंबे समय से अतिप्रवाह नहीं हुआ। मुझे एक ठीक ऊपरी सीमा की तरह लगता है!
नेलियस

एक त्वरित आसान जांच: 1 और 100 = 1060 के बीच के
अपराधों का योग

जवाबों:


15

जे, ४१ ३२ १ ९ अक्षर:

अद्यतन करें

(सरल छलनी)

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 वर्ण)

यदि PARI / GP समाधान की अनुमति है, तो:

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

अापका नजरिया क्या है? PARI / GP और Mathematica ठीक प्रोग्रामिंग भाषाएं हैं।
आठ

@ बारहवीं, नहीं, वे गोल्फ नियमों में से एक को तोड़ते हैं: अंतर्निहित विशिष्ट हाइलेवल कार्यों का उपयोग करते हुए
नैकिलोन

मुझे नहीं लगता कि ऐसा कोई नियम है । हाइलेवल फ़ंक्शंस का उपयोग करना अभी भी एक खुला मामला है। पूर्व के लिए देखें। इस मेटा प्रश्न
9

1
28 चरस Range[a,b]~Select~PrimeQ//Tr
च्यानोग


5

C # (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++)। यह इसे 288 चार्ट पर जाता है। आप pलंबी वापसी भी कर सकते हैं और बस 0या तो लौट सकते हैं या nलूप को छोटा कर सकते हैं t+=p(i)। 277 वर्ण, तब।
जॉय

5

PARI / GP (44 अक्षर)

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

6
क्या मतदाताओं को अपने -1 का कारण नहीं देना चाहिए?
आठ

डाउनवोट संभवतः बिल्ट-इन का उपयोग करने के लिए था।
mbomb007

4

BASH शेल

47 वर्ण

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

संपादित करें: बस ओवरफ्लो का एहसास हुआ और इसे दोहरे के रूप में लिया गया है।

५२ ५० वर्ण

यहां थोड़ा लंबा समाधान है, लेकिन ओवरफ्लो को भी संभालता है

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

tr पेस्ट से छोटा है, और आप सिंगल कोट्स (एस्केप $) को हटा सकते हैं ।
नब

@ नब, इसे ठीक करूँगा जैसे ही मैं अपने हाथों को एक * निक्स बॉक्स पर प्राप्त करूंगा, या आप सम्मान कर सकते हैं।
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 तक की गणना करते समय यह कितना अक्षम होगा!
नेलियस २ N

सच है, लेकिन दक्षता नियमों में नहीं थी!
निक लार्सन

आप जानते हैं कि संकलक संख्याओं को डिफॉल्ट करता है 0 सही? यही कारण है कि आप एक जोड़े को वहाँ और अधिक चार
बचाओ

इसके बिना संकलित होने पर त्रुटि मिलती है
निक लार्सेन

... क्योंकि इसका उपयोग करने से पहले इसे कभी नहीं सौंपा गया है ( s -= i;क्योंकि इसके माध्यम से सिंटैक्टिक शुगर है s = s - i;जिसके लिए sइसे सेट करने से पहले एक्सेस करने की कोशिश करता है )
निक लार्सन

3

हास्केल (80)

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


यह कोड-गोल्फ है! आप अपने सामान के लिए ऐसे लंबे नामों का उपयोग क्यों करते हैं?
16

4
सी, यू, एस की तुलना में छोटे नाम खोजना मुश्किल है ... बाकी भाषा मानक पुस्तकालय है।
जेबी

3

रूबी 1.9, 63 वर्ण

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 या कमांड लाइन से नहीं पढ़ रहे हैं। मैंने सोचा कि यह अन्य Pari / GP और Mathematica समाधान के लिए एक अच्छा विकल्प था।


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↓⍳⎕

यह एपीएल में primes की सूची बनाने के लिए एक प्रसिद्ध मुहावरे ( स्पष्टीकरण के लिए इस पृष्ठ को देखें ) का एक संशोधन है ।

उदाहरण:

      +/((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
वास्तव में आप सही नहीं हैं, मैं इसके बिना कर सकता था। यह विशुद्ध रूप से सौंदर्य संबंधी कारणों से था (क्योंकि मुझे पता था कि मेरा कोड वैसे भी सबसे छोटा नहीं है :))
प्लेनैपस

खैर, मेरे से सिर्फ एक ही है, क्योंकि यह निश्चित रूप से सबसे लंबा नहीं है।
गफ्फी

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

Q (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

पायथन 3.1 (153 वर्ण):

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]एक बाइट (न्यूलाइन को हटाने) को बचाने के लिए। और पायथन 3 का उपयोग करने से आपको उपयोग करने की अनुमति मिलेगी input(), जब तक आप कोष्ठक डालते हैं print, इसलिए 4 बाइट्स निकालते हैं, लेकिन 1 जोड़ते हैं।
mbomb007

0

133 वर्ण, लुआ (कोई is_prime- बिल्ट इन फ़ंक्शन)

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


"ए और बी को कमांड लाइन या स्टडिन से लिया जा सकता है" किन दो तरीकों से संख्याओं को आपके कोड में पास किया जा सकता है?
मैनेटवर्क

1
इस 13 के अनुसार (इस पर कुछ भी) एक अभाज्य संख्या नहीं है।
स्टूल ०

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