विल्सन संख्याओं की गणना करें


14

एक सकारात्मक पूर्णांक n को देखते हुए , n वें विल्सन संख्या W (n) की गणना करें जहां

विल्सन संख्या सूत्र

और e = 1 यदि n में एक आदिम मूल मोडुलो n है , अन्यथा e = -1। दूसरे शब्दों में, यदि कोई पूर्णांक x मौजूद नहीं है , तो n एक आदिम जड़ है जहां 1 < x < n-1 और x 2 = 1 mod n है

  • यह वह जगह है तो एक समारोह या कार्यक्रम है कि गणना करता है के लिए कम से कम कोड बना n वें एक इनपुट पूर्णांक के लिए विल्सन संख्या n > 0।
  • आप 1-आधारित या 0-आधारित अनुक्रमण का उपयोग कर सकते हैं। आप पहले n विल्सन नंबरों को आउटपुट करने का विकल्प भी चुन सकते हैं ।
  • यह OEIS अनुक्रम A157249 है

परीक्षण के मामलों

n  W(n)
1  2
2  1
3  1
4  1
5  5
6  1
7  103
8  13
9  249
10 19
11 329891
12 32
13 36846277
14 1379
15 59793
16 126689
17 1230752346353
18 4727
19 336967037143579
20 436486
21 2252263619
22 56815333
23 48869596859895986087
24 1549256
25 1654529071288638505

इसके अलावा, Oeis n के बाद से विभाजित होता है
H.PWiz

@EriktheOutgolfer मैंने जोड़ा कि एक आदिम जड़ होने का क्या मतलब है।
मील

1
क्या हम n से विभाजित करने वाले हैं?
लीक नून

जहां तक ​​मुझे पता है, यदि k = 1और e = -1, उत्पाद का परिणाम होगा 0। (क्षमा करें कई प्रश्न पूछ रहे हैं, लेकिन मुझे अपने उत्तर के लिए स्पष्टीकरण की आवश्यकता है: पी)
एरिक आउटगोल्फर

2
इन संख्याओं को विल्सन उद्धरण कहा जाता है । एक विल्सन संख्या एक पूर्णांक है जो अपने विल्सन भागफल को समान रूप से विभाजित करता है। उदाहरण के लिए, 13 के बाद से एक विल्सन संख्या है 13 | 36846277 है । इसके अलावा, डब्ल्यू (एन) आमतौर पर हर को बाहर करता है।
डेनिस

जवाबों:


8

जेली , 8 7 बाइट्स

1 बाइट डेनिस के लिए धन्यवाद।

gRỊTP‘:

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

आपको वास्तव में गणना करने की eआवश्यकता नहीं है क्योंकि आपको किसी भी तरह से विभाजित करने की आवश्यकता है।


gRỊTएक बाइट बचाता है।
डेनिस

डेनिस gRỊTजेली के ty विवरण के लिए नीचे उतर रहा है ...
corsiKa


3

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

If[(k=#)==1,2,(Times@@Select[Range@k,CoprimeQ[k,#]&]+If[IntegerQ@PrimitiveRoot@#,1,-1])/#]&

@BillSteihn कृपया दूसरों के उत्तरों ( प्रासंगिक मेटा चर्चा ) को सीधे संपादित न करें । यदि आपके पास एक गोल्फ सुझाव है, तो कृपया एक टिप्पणी छोड़ दें!
जुंगवान मिन

@JungHwanMin हाँ, मैंने देखा कि संपादित करें! नए उपयोगकर्ताओं को नियमों के साथ मदद करने के लिए धन्यवाद
J42161217

3

अजगर , 11 बाइट्स

/h*Ff>2iTQS

यहाँ यह कोशिश करो!


कैसे?

  • /h*Ff>2iTQS - पूर्ण विषय।

  • S- समावेशी रेंज उत्पन्न करें [1, इनपुट]

  • f - फ़िल्टर उन रखें:

    • iTQ - जिसका जीसीडी इनपुट के साथ है।

    • >2- कम से कम दो (निम्न में से या तो द्वारा प्रतिस्थापित किया जा सकता है: है q1, !t)

  • *F- गुणा को बार-बार लगाएं। दूसरे शब्दों में, सूची का उत्पाद।

  • h - 1 से उत्पाद में वृद्धि।

  • / - इनपुट के साथ फर्श विभाजन।

TL; DR : रेंज [1, इनपुट] में सभी कॉपीराइम्स प्राप्त करें , उनका उत्पाद प्राप्त करें, इसे बढ़ाएँ और इसे इनपुट द्वारा विभाजित करें।



2

जे, 33 बाइट्स

3 :'<.%&y>:*/(#~1&=@(+.&y))1+i.y'

यह एक और कुछ से एक सुधार देखने के लिए एक अनुरोध का अधिक है। मैंने पहले एक मौन समाधान की कोशिश की, लेकिन यह इससे अधिक लंबा था।

व्याख्या

यह जे में श्री Xcoder के समाधान का काफी सीधा अनुवाद है।

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



2

आर , 82 बाइट्स

function(n)(prod((1:n)[g(n,1:n)<2])+1)%/%n
g=function(a,b)ifelse(o<-a%%b,g(b,o),b)

eयहां कई उत्तरों की तरह पता लगाने के बजाय पूर्णांक विभाजन का उपयोग किया जाता है, हालांकि मैंने वह काम किया e=2*any((1:n)^2%%n==1%%n)-1जिसमें किनारे का मामला भी शामिल था n=1जिसके बारे में मुझे लगा कि यह बहुत साफ-सुथरा है।

Rturnbull के सदिश GCD फ़ंक्शन का उपयोग करता है ।

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



2

जावास्क्रिप्ट (ईएस 6), 72 70 68 बाइट्स

f=(n,p=1,i=n,a=n,b=i)=>i?f(n,b|a-1?p:p*i,i-=!b,b||n,b?a%b:i):-~p/n|0
<input type=number min=1 oninput=o.textContent=f(+this.value)><pre id=o>

इंटीजर डिवीजन ने फिर से हमला किया। संपादित करें: @ बस्ती के लिए 2 बाइट्स का धन्यवाद सहेजा गया। एक और 2 बाइट्स को अधिक पुनरावर्ती बनाकर सहेजा, ताकि यह छोटे मूल्यों के लिए असफल हो जाए, जितना कि इसका इस्तेमाल किया गया था।


70 बाइट्स (हालांकि मुझे इस पर अभी तक परीक्षणों का एक पूरा सेट चलाने का मौका नहीं मिला है):f=(n,i=n,p=1,g=(a,b)=>b?g(b,a%b):a)=>--i?f(n,i,g(n,i)-1?p:p*i):-~p/n|0
झबरा

मैं जिस पुनरावर्ती समाधान पर काम कर रहा था, उससे पहले वापस चला गया, इससे पहले कि मैं एक सरणी की मैपिंग करने की कोशिश करूं और इसे 70 बाइट्स तक भी ले जाऊं। यह थोड़ा गड़बड़ है, लेकिन आप 70 से नीचे अपने समाधान प्राप्त करने में मदद करने के लिए इससे कुछ निस्तारण करने में सक्षम हो सकते हैं:(n,x=n)=>(g=s=>--x?g(s*(h=(y,z)=>z?h(z,y%z):--y?1:x)(n,x)):++s)(1)/n|0
Shaggy

@ शैगी खैर, मैं इसे देखने के लिए प्रेरित था, लेकिन मुझे यकीन नहीं है कि आप क्या उम्मीद कर रहे थे ...
नील

2

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

f n=div(product[x|x<-[1..n],gcd x n<2]+1)n

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

अन्य सभी उत्तरों के रूप में पूर्णांक विभाजन चाल का उपयोग करता है।
1-आधारित सूचकांकों का उपयोग करता है।

व्याख्या

f n=                                       -- function
    div                                  n -- integer division of next arg by n
       (product                            -- multiply all entries in the following list
               [x|                         -- return all x with ...
                  x<-[1..n],               -- ... 1 <= x <= n and ...
                            gcd x n<2]     -- ... gcd(x,n)==1
                                      +1)  -- fix e=1

1

जाप , 11 बाइट्स

õ fjU ×Ä zU

कोशिश करो


व्याख्या

पूर्णांक का निहित इनपुट U

õ

1 से पूर्णांक का एक सरणी उत्पन्न करें U

fjU

फ़िल्टर ( f) के सह-प्रिम्स U

×

गुणा से कम करें।

Ä

1 जोड़ें।

zU

द्वारा विभाजित U, परिणाम फर्श और स्पष्ट रूप से उत्पादन।


n = 25 के लिए यह 1654529071288638400 लौटाता है और यह गलत होगा क्योंकि यह 1654529071288638505 होगा
RosLuP

@RosLuP: जैसा कि चुनौती लेखक ने पुष्टि की है, हमें 32-बिट से अधिक की संख्या को संभालने की आवश्यकता नहीं है।
झबरा

1

Axiom, 121 बाइट्स

f(n)==(e:=p:=1;for i in 1..n repeat(if gcd(i,n)=1 then p:=p*i;e=1 and i>1 and i<n-1 and(i*i)rem n=1=>(e:=-1));(p+e)quo n)

कुछ प्रकार, ungolf जोड़ें और परिणाम

w(n:PI):PI==
   e:INT:=p:=1
   for i in 1..n repeat
       if gcd(i,n)=1 then p:=p*i
       e=1 and i>1 and i<n-1 and (i*i)rem n=1=>(e:=-1)
   (p+e)quo n

(5) -> [[i,f(i)] for i in 1..25]
   (5)
   [[1,2], [2,1], [3,1], [4,1], [5,5], [6,1], [7,103], [8,13], [9,249],
    [10,19], [11,329891], [12,32], [13,36846277], [14,1379], [15,59793],
    [16,126689], [17,1230752346353], [18,4727], [19,336967037143579],
    [20,436486], [21,2252263619], [22,56815333], [23,48869596859895986087],
    [24,1549256], [25,1654529071288638505]]
                                                  Type: List List Integer

(8) -> f 101
   (8)
  9240219350885559671455370183788782226803561214295210046395342959922534652795_
   041149400144948134308741213237417903685520618929228803649900990099009900990_
   09901
                                                    Type: PositiveInteger

1

जावास्क्रिप्ट (ईएस 6), 83 81 80 78 76 68 बाइट्स

इस पर मेरा पहला पास नील के समाधान से कुछ बाइट्स का था, यही वजह है कि मैंने मूल रूप से इसे नीचे दिए गए ऐरे रिडक्शन सॉल्यूशन के पक्ष में खाई। चूंकि मैंने नील के साथ टाई करने के लिए इसे नीचे उतारा है।

n=>(g=s=>--x?g(s*(h=(y,z)=>z?h(z,y%z):--y?1:x)(n,x)):++s)(1,x=n)/n|0

कोशिश करो

o.innerText=(f=
n=>(g=s=>--x?g(s*(h=(y,z)=>z?h(z,y%z):--y?1:x)(n,x)):++s)(1,x=n)/n|0
)(i.value=8);oninput=_=>o.innerText=f(+i.value)
<input id=i type=number><pre id=o>


गैर-पुनरावर्ती, 76 बाइट्स

मैं एक गैर-पुनरावर्ती समाधान देना चाहता था यह देखने की कोशिश करता हूं कि यह कैसे बदल जाएगा - उतना बुरा नहीं जितना कि मुझे उम्मीद थी।

n=>-~[...Array(x=n)].reduce(s=>s*(g=(y,z)=>z?g(z,y%z):y<2?x:1)(--x,n),1)/n|0

कोशिश करो

o.innerText=(f=
n=>-~[...Array(x=n)].reduce(s=>s*(g=(y,z)=>z?g(z,y%z):y<2?x:1)(--x,n),1)/n|0
)(i.value=8);oninput=_=>o.innerText=f(+i.value)
<input id=i type=number><pre id=o>

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