दो वर्गों की संख्या की गणना करें


45

एक गैर-नकारात्मक संख्या को देखते हुए n, nपूर्णांक के दो वर्गों n == a^2 + b^2( OEIS A004018 ) के योग के रूप में व्यक्त करने के तरीकों की संख्या को आउटपुट करें । ध्यान दें कि aऔर bसकारात्मक, नकारात्मक या शून्य हो सकता है, और उनका क्रम मायने रखता है। सबसे कम बाइट्स जीतता है।

उदाहरण के लिए, n=25देता है 12क्योंकि के 25रूप में व्यक्त किया जा सकता है

(5)^2  + (0)^2
(4)^2  + (3)^2
(3)^2  + (4)^2
(0)^2  + (5)^2
(-3)^2 + (4)^2
(-4)^2 + (3)^2
(-5)^2 + (0)^2
(-4)^2 + (-3)^2
(-3)^2 + (-4)^2
(0)^2  + (-5)^2
(3)^2  + (-4)^2
(4)^2  + (-3)^2

यहाँ पर मान हैं n=25। सावधान रहें कि आपका कोड किसके लिए काम करता है n=0

0 1
1 4
2 4
3 0
4 4
5 8
6 0
7 0
8 4
9 4
10 8
11 0
12 0
13 8
14 0
15 0
16 4
17 8
18 4
19 0
20 8
21 0
22 0
23 0
24 0
25 12

यहां n=100सूची के रूप में मान दिए गए हैं ।

[1, 4, 4, 0, 4, 8, 0, 0, 4, 4, 8, 0, 0, 8, 0, 0, 4, 8, 4, 0, 8, 0, 0, 0, 0, 12, 8, 0, 0, 8, 0, 0, 4, 0, 8, 0, 4, 8, 0, 0, 8, 8, 0, 0, 0, 8, 0, 0, 0, 4, 12, 0, 8, 8, 0, 0, 0, 0, 8, 0, 0, 8, 0, 0, 4, 16, 0, 0, 8, 0, 0, 0, 4, 8, 8, 0, 0, 0, 0, 0, 8, 4, 8, 0, 0, 16, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 8, 4, 0, 12]

मजेदार तथ्य: अनुक्रम में ऐसे शब्द शामिल हैं जो मनमाने ढंग से उच्च हैं, और इसके चलने की औसत सीमा contains है।

लीडरबोर्ड:


4
रुको क्या?? "अनुक्रम में ऐसे शब्द हैं जो मनमाने ढंग से उच्च हैं, और इसके चलने की औसत सीमा that है।"
स्टीवी ग्रिफिन

@StewieGriffin दो कथन सुसंगत हैं। अनुक्रम पर विचार करें 1,0,2,0,0,3,0,0,0,4,0,0,0,0,5,...। किसी भी नॉनजेरो संख्या के बाद अनुक्रम को काट देना, अब तक का औसत 1. है, और 0 के रनों का बाद के अनुक्रम में कम और कम प्रभाव पड़ता है।
12

5
मुझे पता है कि यह लगातार है .. =) मैंने टिप्पणी पोस्ट करते समय 10.000 पहले नंबरों की जाँच की थी। मुझे क्या नहीं मिलता है: पृथ्वी पर क्यों यह बराबर पाई करता है?
स्टीवी ग्रिफिन

29
@StewieGriffin N तक के शब्दों का योग ^ 2 + b ^ 2 <= N के साथ बिंदुओं (a, b) से मेल खाता है। ये त्रिज्या sqrt (N) के वृत्त में जाली बिंदु हैं, जिसका क्षेत्रफल iceN है।
xnor

2
@xnor और वहाँ जादू चला जाता है :(
डीक

जवाबों:


19

अजगर ( 59 57 56 बाइट्स)

lambda n:0**n+sum((-(n%(x-~x)<1))**x*4for x in range(n))

ऑनलाइन डेमो

मेरे सीजेएम उत्तर के रूप में, यह मोबीस उलटा उपयोग करता है और छद्मक्वासिलिनियर समय में चलता है।

2 बाइट्स की बचत के लिए Sp3000 के लिए धन्यवाद , और 1 के लिए feersum


1
वे कोष्ठक कष्टप्रद हैं।
lirtosiast

@ThomasKwa, मुझे इसके बारे में बताएं। जिस चीज ने वास्तव में मुझे आश्चर्यचकित किया, उसके एक संस्करण में मैं जिस एक पोस्ट के रास्ते से गुजरा, वह था -1**xहमेशा से -1। मैं उम्मीद करता -1था कि एक एकल पूर्णांक शाब्दिक टोकन हो सकता है न कि एक निम्न-पूर्ववर्ती एकता शून्य से एक के बाद।
पीटर टेलर

2
इनाम पर बधाई! आपका कोड मेरे द्वारा लिए गए किसी भी चीज़ से कम है। आपका समाधान पूरी तरह से नए और अप्रत्याशित गणितीय विचार पर आधारित है, और यह मुझे खुशी देता है कि यह इतनी सीधी-सादी चुनौती के बावजूद भी संभव है। मोबियस-उलटा परिणाम काफी सुंदर है और मैंने इसके लिए एक प्रमाण प्राप्त करने का आनंद लिया। खुद।
xnor

1 बाइट को गुणन को 4 से बाद में ले जाकर बचाया जा सकता है **x
feersum

@PeterTaylor क्या आप विस्तृत कर सकते हैं कि आपका एल्गोरिथ्म कैसे काम करता है / क्या आप मुझे संसाधन की ओर संकेत कर सकते हैं? मैं यह नहीं देख सकता कि आप सूकरों की समस्या की संख्या के लिए मोबीअस उलटा कैसे लागू कर सकते हैं।
दोष

15

गणितज्ञ, १३ बाइट्स

यदि बिल्ट-इन की अनुमति है, तो यह गणितज्ञ में कैसे करना है।

2~SquaresR~#&

0 <= n <= 100 के लिए

2~SquaresR~# & /@ Range[0, 100]

{1, 4, 4, 0, 4, 8, 0, 4, 4, 4, 8, 0, 8, 0, 8, 0, 4, 8, 4, 0, 8, 0, 0, 0 , 12, 8, 0, 8, 0, 4, 0, 4, 0, 8, 0, 4, 8, 0, 8, 8, 0, 0, 8, 0, 0, 4 , 12, 0, 8, 8, 0, 0, 0, 8, 0, 8, 0, 8, 0, 4, 16, 0, 8, 0, 0, 4, 8, 8 , 0, 0, 0, 0, 0, 8, 4, 8, 8, 0, 16, 0, 0, 0, 8, 8, 0, 0, 0, 0, 8, 4, 0 , 12}


1
बेशक मैथेमेटिका में इसके लिए अंतर्निहित है।
हाइपरएन्यूट्रीनो

14

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

f=lambda n,x=1:+(x>n)or(n%x<1)-f(n,x+2)/4<<2

यह लगभग xsot के समाधान के समान है (जो कि पीटर टेलर के समाधान पर आधारित है ), लेकिन संकेतों को नियंत्रित करने के तरीके को सरल करके 8 बाइट्स बचाता है।

ध्यान दें कि एक पूर्ण कार्यक्रम के लिए, हम फ़ंक्शन में 2 बाइट्स को फ़ंक्शन के बाहर खर्च किए बिना बचा सकते हैं:

f=lambda n,x=1:x>n or(n%x<1)-f(n,x+2)/4<<2
print+f(input())

इस तरह से एक पूर्ण कार्यक्रम के लिए दो अतिरिक्त बाइट्स:

n=input()
f=lambda x:x>n or(n%x<1)-f(x+2)/4<<2
print+f(1)

के लिए n > 0एक बहुत सुपाच्य 40 बाइट समाधान है:

f=lambda n,x=1:n/x and(n%x<1)*4-f(n,x+2)

1
इनाम जीतने के लिए बधाई! पुनरावर्ती घटाव एक स्वच्छ और संक्षिप्त तरीका है जो भाजक से संकेत निकालने की आवश्यकता के बिना विषम विभाजकों के लिए वैकल्पिक राशि को व्यक्त करता है। इसके अलावा, n = 0 की चतुर संभाल के साथ एक पुनरावर्ती को पीटर टेलर के समाधान को सुव्यवस्थित करने के लिए xsot का श्रेय।
xnor

12

पायथ, 13 बाइट्स

/sM^^R2}_QQ2Q

परीक्षण सूट

/sM^^R2}_QQ2Q
                 Q = eval(input())
       }_QQ      Inclusive range from -Q to Q (all possible a and b)
    ^R2          Map to their squares
   ^       2     Form all pairs
 sM              Sum pairs
/           Q    Count occurances of Q

देर से, लेकिन मुझे नहीं लगता कि आपको आखिरी जरूरत है Q
13

12

जे, 16 बाइट्स

+/@,@:=+&*:/~@i:

यह एक राक्षसी क्रिया है (दूसरे शब्दों में, एक एकात्मक कार्य)। इसे ऑनलाइन आज़माएं या देखें कि यह सभी परीक्षण मामलों को पास करता है

व्याख्या

+/@,@:=+&*:/~@i:  Denote input by n
              i:  The array of integers from -n to n
           /~@    Take outer product wrt the following function:
       +           the sum of
        &*:        squares of both inputs
                  This results in a 2D array of a^2+b^2 for all a, b between -n and n
      =           Replace by 1 those entries that are equal to n, and others by 0
   ,@:            Flatten the binary matrix
+/@               Take its sum

11

पायथन 2, 69 55 53 52 बाइट्स

f=lambda n,x=1:+(x>n)or(2-x%4)*(n%x<1)+f(n,x+2)/4<<2

यह पीटर टेलर के उत्कृष्ट समाधान पर आधारित एक पुनरावर्ती कार्य है ।


1
यह एक महान सुधार है। लेकिन, अभी भी इसे छोटा बनाने का एक तरीका है, और मैं आपको इसे देखने के लिए प्रोत्साहित करता हूं।
xnor

1
@xnor एक और बाइट नीचे। मुझे आशा है कि आप अपनी आस्तीन ऊपर कोई और चाल नहीं है।
xsot

2
मुझे नहीं पता कि मुझे इसका जवाब देना चाहिए या नहीं, यह सिर्फ आपका समाधान है और एक ट्रिक f=lambda n,x=1:+(x>n)or(n%x<1)-f(n,x+2)/4<<2:। इसके अलावा, मुझे लगता है कि हम डिफ़ॉल्ट अधिकतम पुनरावृत्ति गहराई से अधिक की परवाह नहीं करते हैं?
मिच श्वार्ट्ज

1
@ मिचस्चवार्ट्ज मुझे लगता है कि इनाम के योग्य एक अविश्वसनीय सुधार और अंतिम अनुकूलन xnor के मन में था।
xsot

1
@MitchSchwartz हाँ, यही अनुकूलन मैं सोच रहा था! और xsot की /4<<2ट्रिक इसे जितना मेरे पास है उससे कम बनाता है।
xnor

8

जूलिया, 40 बाइट्स

n->n>0?4sum(i->(n-i^2)^.5%1==0,1:n^.5):1

Ungolfed:

function f(n)
  if n==0
    return 1           # Handle special case of n=0
  else
    m=0                # Start the counter at zero
    for i=1:sqrt(n)    # Loop over the values (i) whose squares are
                       # less than n (except zero)
      k=sqrt(n-i^2)    # Find k such that n=k^2+i^2
      if k==floor(k)   # if k is an integer, we've found a pair
        m+=4           # Add one for each of k^2+i^2, (-k)^2+(-i)^2, and the other two
      end
    end
    return m           # Return the resulting count
  end
end

ध्यान दें कि लूप शामिल नहीं है i==0, क्योंकि जब nएक वर्ग होता है, तो यह पहले से ही शामिल होता है i=sqrt(n), और उस फॉर्म के लिए केवल चार नहीं, आठ नहीं होते हैं (! 0^2+k^2, 0^2+(-k)^2, k^2+0^2, (-k)^2+0^2)।


7

सीजेएम, 25 23 बाइट्स

Zri:R#Ym*{Rf-Yf#:+R=},,

यह एक सैद्धांतिक समाधान है जिसमें इनपुट n के लिए O (9 n ) समय और मेमोरी की आवश्यकता होती है ।

एक अतिरिक्त बाइट की कीमत पर - कुल 24 बाइट्स के लिए - हम O (n 2 ) की जटिलता को कम कर सकते हैं :

ri:R)Y*Ym*{Rf-Yf#:+R=},,

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

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

भी

Z                  Push 3.
 ri:R              Read an integer from STDIN and save it in R.
     #             Compute 3**R.

या

ri:R               Read an integer from STDIN and save it in R.
    )Y*            Add 1 and multiply by 2.

फिर

Ym*                Take the second Cartesian power, i.e., compute all pairs.
   {          },   Filter the pairs:
    Rf-              Subtract R from each.
       Yf#           Square the differences.
          :+         Add the squares.
            R=       Compare with R.
                   If = pushed 1, keep the pair.
                ,  Count the kept pairs.

और एक बाइट की बचत से जटिलता को n (n) से कम करना संभव है
पीटर टेलर

हां मैंने देखा। वह आश्चर्यजनक है।
डेनिस

7

CJam ( 25 24 22 21 बाइट्स)

{:X!X{X\2*)%!4*\-}/z}

ऑनलाइन डेमो

यह pseudoquasilinear time * में चलता है और OEIS के कथन का उपयोग करता है

Moebius का रूपांतरण अवधि 4 अनुक्रम [4, 0, -4, 0, ...] है। - माइकल सोमोस, 17 सितंबर 2007

इनपुट 0स्पष्ट रूप से एक विशेष मामला है (मोबीअस ट्रानफॉर्म और एनीहिलेटर एक साथ अच्छी तरह से नहीं जाते हैं), लेकिन केवल एक चार्ज की लागत समाप्त हो गई।

* छद्म- क्योंकि यह इनपुट के मूल्य में विलक्षण है, इनपुट का आकार नहीं; quasi क्योंकि यह Theta(n)आकार के पूर्णांक पर संचालन करता है n; एक b-बिट आधुनिक आपरेशन लेना चाहिए b lg bसमय है, तो कुल मिलाकर यह लेता है Theta(n lg n lg lg n)समय।


6

जाप , 42 37 33 बाइट्स

Japt , Ja vaScri pt का छोटा संस्करण है । दुभाषिया

V=Un oU+1;Vr@X+(Vf_p2 +Y*Y¥U)l ,0

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

           // Implicit: U = input number
V=Un oU+1  // Set variable V to range(-U, U+1). Ends up like [-U,-U+1,...,U-1,U]
Vr@    ,0  // Reduce each item Y in V with this function, starting at 0:
X+(     l  //  Return the previous value X + the length of:
Vf_p2      //   V filtered by items Z where Z*Z
+Y*Y==U)   //    + Y*Y equals U.
           // This ends up as the combined length of all fitting pairs of squares.
           // Implicit: return last expression

शायद एक बेहतर तकनीक है; सुझावों का स्वागत है।


6

पायथन 3, 68 61 60 बाइट्स

lambda n:0**n+4*sum(i**.5%1+(n-i)**.5%1==0for i in range(n))

दो नेस्टेड सूची समझ का उपयोग करना बहुत महंगा है। इसके बजाय, यह जाँचता है कि दोनों त्रिज्या sqrt (n) के वृत्त पर निर्देशांक पूर्णांक हैं।

पीटर टेलर ने मोएबियस-इनवर्टर आधारित दृष्टिकोण के साथ इसे हराया है ।


बहुत बढ़िया। मैं एक पुनरावर्ती समारोह के साथ छेड़छाड़ कर रहा था, लेकिन n=0सुरुचिपूर्ण ढंग से हल नहीं कर सका ।
xsot


5

हास्केल, 42 बाइट्स

f n|q<-[-n..n]=sum[1|a<-q,b<-q,a*a+b*b==n]

उपयोग को समाप्त करें:

*Main> map f [0..25]
[1,4,4,0,4,8,0,0,4,4,8,0,0,8,0,0,4,8,4,0,8,0,0,0,0,12]
*Main> 

3
बाइंडिंग qएक गार्ड में चतुर है, मैं इस चाल भी याद रखेंगे।
xnor

5

जूलिया, 89 79 63 बाइट्स

g(x)=cos(π*x^.5)^2÷1
a(n)=(n==0)+4sum([g(i)g(n-i)for i=1:n])

यह एक नामित फ़ंक्शन है aजो पूर्णांक को स्वीकार करता है और एक फ्लोट देता है। यह एक सहायक कार्य कहता है g

Ungolfed:

function g(x::Integer)
    floor(cos(π*sqrt(x))^2)
end

function a(n::Integer)
    (n == 0) + 4*sum([g(i)*g(n-i) for i=1:n])
end

यहाँ का दृष्टिकोण OEIS पर सूचीबद्ध वेस्ले इवान हर्ट के सूत्र के सरलीकरण का उपयोग करता है। सरलीकरण ग्लेन ओ द्वारा पाया गया था, एक ही व्यक्ति जिसने इस उत्तर से 26 बाइट्स का मुंडन किया था!


3 बाइट्स को बचाने के x^.5बजाय उपयोग करें sqrt(x)। और (n==0)2 बाइट्स बचाता है 1÷(n+1)। और आप cos(π*sqrt(x))^2÷1इसके बजाय का उपयोग करके 4 और वर्ण बचा सकते हैं floor(cos(π*sqrt(x))^2)। इसके अलावा, इसके 1:n/2बजाय का उपयोग करें 1:n÷2, क्योंकि इसमें फ्लोट का उपयोग करने से कोई नुकसान नहीं है g(x)और यह iवैसे भी पूर्णांक के लिए लॉक हो जाएगा । और sum(i->g(i)g(n-i),1:n/2)कुछ और पात्रों को भी शेव करेंगे।
ग्लेन ओ

@GlenO महान सुझाव, धन्यवाद। हालांकि यह sumचाल विफल रहती है n=0, इसलिए मैंने सरणी की समझ को बनाए रखा।
एलेक्स ए।

1
तो, इसे पुनर्प्राप्त किया जा सकता है - यदि आप i=0मामले को योग में होने देते हैं, तो आप साइन ऑन कर सकते हैं 4g(n)। तो (n==0)-4g(n)-4g(n/2)+8sum(i->g(i)g(n-i),0:n/2), जो त्रुटि में नहीं चलेगा। लेकिन आप और भी बेहतर कर सकते हैं, समरूपता को ध्यान में रखते हुए -(n==0)+4sum([g(i)g(n-i)for i=1:n])
ग्लेन ओ

@ गेलो यह सरलीकरण गंभीर रूप से प्रतिभा है। मैं आपको OEIS पर अनुक्रम के लिए एक वैकल्पिक सूत्र के रूप में प्रस्तुत करने की सलाह देता हूं!
एलेक्स ए।

4

पायथ, 16 15 बाइट्स

lfqQs^R2T^}_QQ2

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

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

lfqQs^R2T^}_QQ2

          }_QQ   Compute the inclusive range from -Q to Q (input).
         ^    2  Take the second Cartesian power, i.e., compute all pairs.
 f               Filter; for each T in the list of pairs:
     ^R2T          Compute the squares of T's elements.
    s              Add the squares.
  qQ               Compare the sum with Q.
                 If q returned True, keep T.
l                Count the kept pairs.

4

टीआई-बेसिक, 23 बाइट्स

sum(seq(Σ(X²+Y²=Ans,X,-Ans,Ans),Y,-Ans,Ans

बहुत सीधा। Σ(योग है।

अजीब बात है, sum(seq(sum(seq(एक फेंकता है ERR:ILLEGAL NEST, और ऐसा करता है Σ(Σ(, लेकिन sum(seq(Σ(ठीक है। मैंने Σ(एक करीबी व्यक्ति को बचाने के लिए अंदर की तरफ चुना ।


बीच क्या अंतर है sumऔर Σ?
एलेफाल्फा

1
@alephalpha Σ (एक योग लेता है, के सभी को जोड़कर X²+Y²=Ansके बीच एक्स के मूल्यों से -Ansऔर Ansराशि (एक का योग है। सूची इसलिए हम पहली सूची बनाने के लिए seq (..., वाई, -Ans, उत्तर का उपयोग कर की जरूरत है,
lirtosiast

4

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

n=>eval("for(r=0,a=~n;a++<n;)for(b=~n;b++<n;)r+=a*a+b*b==n")

6 बाइट्स @ edc65 की बदौलत बच गए !

व्याख्या

n=>eval(`              // use eval to allow for loops in an unparenthesised arrow function
  for(r=0,             // r = number of pairs
    a=~n;a++<n;        // a = first number to square
  )
      for(b=~n;b++<n;) // b = second number to square
        r+=a*a+b*b==n  // add one to the result if a^2 + b^2 == n
                       // implicit: return r
`)

परीक्षा

n = <input type="number" oninput='result.innerHTML=(

n=>eval("for(r=0,a=~n;a++<n;)for(b=~n;b++<n;)r+=a*a+b*b==n")

)(+this.value)' /><pre id="result"></pre>


1
60:n=>eval('for(r=0,a=~n;a++<n;)for(b=~n;b++<n;)r+=a*a+b*b==n')
edc65

@ edc65 अच्छा लगा! मैं छोरों के बिना एक तीर समारोह में छोरों evalडाल करने के लिए उपयोग करने के बारे में नहीं सोचा था for। मैं ~ऑपरेटर हाहा के बारे में भी भूल गया ।
14:81 बजे यूज़र81655

4

पायथन 3, 93 62 69 बाइट्स

Itertools काम नहीं कर रहा था इसलिए मैंने फिर से दो रेंज का इस्तेमाल किया, लेकिन बाइट्स को बचाने के लिए रेंज को बाहर ले गया।

संपादित करें: पिछला कोड वास्तव में काम नहीं करता था, क्योंकि मैंने एन को परिभाषित करने से पहले एन पर सीमा को परिभाषित किया था।

lambda n:sum(i*i+j*j==n for i in range(-n,n+1)for j in range(-n,n+1))

2

एपीएल, 23 20 19 बाइट्स

{+/⍵=∊∘.+⍨×⍨0,,⍨⍳⍵}

स्पष्टीकरण:

{+/⍵=∊∘.+⍨×⍨0,,⍨⍳⍵}        Monadic function:
                 ⍳⍵          1 2 3 ... ⍵
               ,⍨            Duplicate
             0,              Concatenate to 0
          ×⍨                 Square everything
      ∘.+⍨                   Make an addition table
     ∊                       Flatten
   ⍵=                        1s where equal to the input
 +/                          Sum up the 1s

इस तथ्य के अलावा कि एपीएल में जे i:(एन से एन तक संख्या) फ़ंक्शन नहीं है, यह जे जवाब की तरह बहुत काम करता है।

हम एक ट्रेन का उपयोग नहीं कर सकते क्योंकि तीन बाइट की लागत के -\⍳2×⍵बराबर नहीं होने के कारण (-\) ⍳ (2×⍵); इसी तरह अन्य जोड़ियों के साथ। वे सभी कोष्ठक नियमित कार्य को छोटा बनाते हैं।

इसे यहाँ आज़माएँ । आउटपुट का 1मतलब सभी मूल्यों से मेल खाता है।


2

मतलाब 41 बाइट्स

पिछले उत्तरों के रूप में भी छोटा है

@(n)nnz(~mod(sqrt(n-(1:n^.5).^2),1))*4+~n

शक्ति और sqrt के साथ अनिवार्य रूप से Agawa001 का जवाब बदल दिया गया


2

कैंडी , 17 14 बाइट्स

इनपुट शुरू में स्टैक पर धकेल दिया गया

~TbAT1C(sWs+Aeh)Z

~T0C(sWs+Aeh)Z

peekA    # copy arg from stack to register A
range2   # create double sided range on stack, -A, 1-A, ... A-1, A
digit0   # prefix argument to 'cart', 
cart     # cartesian product of current stack(0), and other stack(0)
while    # while stack not empty
  sqr    # pop and square and push
  swap   # swap two stack elements
  sqr    # pop and square and push
  add    # pop and pop and add and push
  pushA  # push original argument
  equal  # equality test 0/1
  popAddZ  # Z := Z + pop
endwhile
pushZ    # push Z onto stack, will be output to stdout on termination

2

सीजेम, 28

qi_mF{3a>},{~)\4%2-&}%4+:*1?

वास्तव में छोटा नहीं है, लेकिन कुशल है। उदाहरण के लिए 15625 का परिणाम तुरंत 28 है। OEIS के कारक-आधारित सूत्र का उपयोग करता है।
इसे ऑनलाइन आज़माएं

स्पष्टीकरण:

qi       read input and convert to integer
_        make a copy (will be used to handle the 0 case at the end)
mF       factorize into [prime exponent] pairs
{…},     filter the array of pairs
  3a>    with the condition that the pair is greater than [3]
          which means the prime factor must be ⩾3
{…}%     transform each pair as follows:
  ~      dump the prime factor and exponent onto the stack
  )      increment the exponent
  \      swap with the prime
  4%     get the remainder mod 4 (it will be 1 or 3)
  2-     subtract 2 (resulting in -1 or 1)
  &      bitwise AND with the incremented exponent (see below)
4+       append a 4 to the array
:*       multiply all
1?       if the input was 0, use 1, else use the above result

गणना के बारे में कुछ विवरण:

  • यदि प्राइम 1 मॉड 4 है, तो कोड गणना करता है (exponent + 1) & -1, जो हैexponent + 1
  • यदि प्राइम 3 मॉड 4 है, तो कोड की गणना करता है (exponent + 1) & 1, जो कि एक्सपोनेंट विषम होने पर 0 है, और 1 भी अगर

इन सभी मूल्यों को एक साथ गुणा किया जाता है और 4 से गुणा किया जाता है, बिल्कुल OEIS फॉर्मूला है।


2

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

def x(n):r=range(-n,n+1);print sum(a*a+b*b==n for a in r for b in r)

एक फ़ंक्शन को परिभाषित करता है जिसे x()कहा जाता है एक संख्या n।

इसे ऑनलाइन आज़माएं। http://ideone.com/aRoxGF


आपको एक printया returnकथन याद आ रहा है ।
ज़र्गब

धन्यवाद, मैं पूरी तरह से भूल गया। लिंक में हालांकि प्रिंट स्टेटमेंट है। कोड बनाते समय मैंने अपना कोड संपादित किया।
R

ठीक है कोई बात नहीं। लेकिन यह भी के लिए गलत परिणाम दे रहा है n=0और n=1(0 और 2 के बजाय 1 और 4)। शायद सीमा सीमा को समायोजित करने की आवश्यकता है?
23

@Zgarb हाँ, उन्हें समाप्त होना चाहिए n+1
lirtosiast

1
मैं इसकी तलाश करूंगा।
R

2

पायथ, 41 35 33 30 27 बाइट्स

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

संपादित करें: isaacg के लिए धन्यवाद , मुझे मिल गया mऔर *Fकाम करने के लिए! हाँ!

?Q*F+4m.&tt%ed4hhdr-PQ2 8 1
                                (implicit) Q = input()
?Q                              If Q != 0
      m                           Map to d (exponent, prime) from ...
                  r-PQ2 8         run-length-encoded(PQ with 2's removed)
       .&                           Bitwise and
           %ed4                       d[-1] % 4
         tt                           -2
                hd                  with d[0]
               h                      +1
    +4                            Append 4 to the resulting array
  *F                              Then multiply it all together
                          1     Else 1

संपादित करें: अधिक बाइट बचत के लिए बिटवाइज़ और बैक लगाएं! इसके अलावा मैंने सभी "पूर्व" सामान हटा दिए। उसे अकड़न होने लगी थी।

Aditsu और उनके CJam समाधान के लिए धन्यवाद , और माल्टीसेन और उनकी युक्तियों के लिए (एक दिन मुझे m*Fdकाम करने के लिए मिलेगा । एक दिन ...)

J4Vr-PQ2 8=J*J.&tt%eN4hhN;?QJ1
                                (implicit) Q=input()
J4                              J=4
    -PQ2                        Remove all 2's from the prime factorization of Q
   r     8                      run-length encode (exponent, prime factor)
  V                      ;      For N in range( the above ):
          =J*J                      J = J * ...
                tt%eN4                N[-1] mod 4 -2 
                      hhN             (exponent + 1)
              .&                    bitwise and
                          ?QJ1  if Q != 0 print(J) else print(1)

ध्यान दें कि,

  • यदि प्राइम 1 मॉड 4 है, तो हम प्राप्त करते हैं -1 & (exponent + 1), जो कि हैexponent + 1

  • लेकिन अगर प्राइम 3 mod 4 है, तो हम प्राप्त करते हैं 1 & (exponent + 1), जो कि 0अगर एक्सपोनेंट विषम है, और 1यदि है भी

इसे सभी को एक साथ गुणा करें (शुरुआत में 4 बार) और हम दो वर्गों के योगों की संख्या प्राप्त करते हैं जो हमारे इनपुट में जोड़ते हैं।


2

पायथन, 57 बाइट्स

अच्छी चुनौती है। दुर्भाग्य से मैं इस समय इससे छोटा नहीं हो रहा हूँ।

lambda n:0**n+sum(2-d%4for d in range(1,n+1)if d%2>n%d)*4

2

PARI / GP, 34 28 बाइट्स

उत्पादन कार्यों का उपयोग करना:

मिच श्वार्ट्ज के लिए 6 बाइट्स का धन्यवाद ।

n->sum(i=-n,n,x^i^2)^2\x^n%x

बिल्ट-इन का उपयोग करते हुए, 33 बाइट्स ( मिच श्वार्ट्ज के लिए 1 बाइट धन्यवाद के साथ बचा ।):

n->if(n,2*qfrep(matid(2),n)[n],1)

qfrep (q, B, {flag = 0}): वेक्टर (आधा) अभिन्न और निश्चित द्विघात रूप q के लिए 1 से B तक मानदंडों के वैक्टर की संख्या। यदि झंडा 1 है, तो 1 से 2B तक के मानक के वैक्टर भी गिनें।



matid(2)एक बाइट बचाता है।
मिच श्वार्ट्ज

1
और जनरेटिंग फंक्शन एप्रोच के लिए 28 से नीचे:n->sum(i=-n,n,x^i^2)^2\x^n%x
मिच श्वार्ट्ज

1

मतलाब, 72 बाइट्स

n=input('');m=fix(sqrt(n));m=(-m:m).^2;disp(nnz(bsxfun(@plus,m,m')==n))


@StewieGriffin धन्यवाद! लेकिन इस मामले में यह एक कार्यक्रम है, एक फ़ंक्शन नहीं है। तो आपके लिंक में स्वीकृत उत्तर के अनुसार इसकी आवश्यकता है, है ना?
लुइस मेंडो

1

मतलाब, 63 50 बाइट्स

@(y)nnz(~mod(sqrt(y-power((1:sqrt(y)),2)),1))*4+~y

  • यह अन्य समान-अधिकार कोड को हरा देता है, इस प्रकार मैंने इसे डाल दिया: डी।

  • कार्यक्रम सकारात्मक पूर्णांक समाधान पाता है, फिर नकारात्मक को शामिल करने के लिए 4 से गुणा करें।

  • यह सभी 25 प्रथम परीक्षण मामलों का प्रदर्शन कर सकता है

    for i=1:25 ans(i)
    end
    
       1
    
       4
    
       4
    
       0
    
       4
    
       8
    
       0
    
       0
    
       4
    
       4
    
       8
    
       0
    
       0
    
       8
    
       0
    
       0
    
       4
    
       8
    
       4
    
       0
    
       8
    
       0
    
       0
    
       0
    
       0
    
       12
    


धन्यवाद @StewieGriffin मैंने इसे एक उचित खेल के रूप में शामिल किया, जो कि luis 'one
Abr001am

टिप्स: जब आप MATLAB से परिणाम पोस्ट करने की योजना बना रहे हैं, तो format compact=) का उपयोग करें
Stewie Griffin

1

जावास्क्रिप्ट, 89 बाइट्स

n=prompt()
p=Math.pow
for (x=c=(+n?0:1);x<=n;x++)if(x&&p(n-p(x,2),.5)%1===0)c+=4
alert(c)

मुझे पता है कि यह सबसे छोटा जावास्क्रिप्ट उत्तर नहीं है, भले ही मैं i / o लाइनों को हटाने के लिए था, लेकिन मुझे लगता है कि यह सबसे अच्छा प्रदर्शन करने वाला JS उत्तर है जिसने मुझे कुछ सेकंड में एक मिलियन के लिए परिणाम दिया (दस मिलियन के बारे में लिया गया) मिनट)।


क्या आप === के बजाय == का उपयोग कर सकते हैं?
lirtosiast

मैं, बस सर्वोत्तम प्रथाओं का उपयोग कर सकता हूं, हा हा।
एडम डेली

1

PHP, 70 बाइट्स, प्रतिस्पर्धा नहीं

for($x=-1;$x++<=$n=$argv[1];)$s+=(-($n%($x-~$x)<1))**$x*4;echo$n?$s:1;

पाइथन के एक उत्तर से चोरी एल्गोरिथ्म ... मैं भूल गया कि कौन सा; पोस्ट करने से पहले कम से कम आंशिक रूप से समझना चाहता हूं कि क्या हो रहा है।


for(;$x<=$n=$argv[1];)$s+=(-($n%(2*$x+1)<1))**$x++*4;echo$n?$s:1;5 बाइट्स बचाता है। $x-~$xके बराबर है 2*$x+1और अब आप वेरिएबल को असाइन किए बिना शुरू कर सकते हैं।
जोर्ग हल्सरमन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.