উইলসন সংখ্যাগুলি গণনা করুন


14

একটি ধনাত্মক পূর্ণসংখ্যা দেওয়া এন , গনা এন উইলসন সংখ্যা ওয়াট (ঢ) যেখানে

উইলসন নম্বর সূত্র

এবং e = 1 যদি n এর একটি আদিম রুট মডুলো এন থাকে , অন্যথায় = -1। অন্য কথায়, n এর একটি আদিম শিকড় থাকে যদি সেখানে কোনও পূর্ণসংখ্যার x না থাকে যেখানে 1 < x < n-1 এবং x 2 = 1 মোড এন

  • এটি তাই কোনও ফাংশন বা প্রোগ্রামের জন্য সংক্ষিপ্ততম কোড তৈরি করুন যা কোনও ইনপুট পূর্ণসংখ্যার জন্য n তম উইলসন সংখ্যাকে n > 0 গণনা করে ।
  • আপনি 1-ভিত্তিক বা 0-ভিত্তিক সূচক ব্যবহার করতে পারেন। আপনি প্রথম এন উইলসন সংখ্যা আউটপুট চয়ন করতে পারেন ।
  • এটি 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

এছাড়াও, ওয়েস n এর পরে ভাগ করে
H.PWiz

@ এরিকথ আউটগল্ফার আমি আদিম শিকড় বলতে যা বোঝায় তা যুক্ত করেছি।
মাইল মাইল

1
আমাদের কি এন দ্বারা ভাগ করার কথা?
লিকি নুন

আমি যতদূর সচেতন, যদি k = 1এবং e = -1, পণ্যের ফলাফল হবে 0। (দুঃখিত, অনেক প্রশ্ন জিজ্ঞাসা করেছেন তবে আমার উত্তরের জন্য আমার স্পষ্টতা দরকার: পি)
এরিক দ্য আউটগোল্ফার

2
এই সংখ্যাগুলিকে উইলসন কোটিভিটিস বলা হয় । একজন উইলসন সংখ্যা একটি পূর্ণসংখ্যা যে তার উইলসন ভাগফল সমানভাবে ভাগ করা হয়। উদাহরণস্বরূপ, 13 হ'ল 13 এর পর থেকে উইলসন নম্বর 36846277 । এছাড়াও, ডাব্লু (এন) সাধারণত ডিনোমিনেটর বাদ দেয়।
ডেনিস

উত্তর:


8

জেলি , 8 7 বাইট

ডেনিসকে 1 বাইট ধন্যবাদ।

gRỊTP‘:

এটি অনলাইন চেষ্টা করুন!

আপনাকে eযেহেতু বিভাজন করতে হবে সেহেতু আপনাকে সত্যিই গণনা করতে হবে না।


gRỊTএকটি বাইট সংরক্ষণ করে।
ডেনিস

ডেনিস gRỊTজেলির বিস্তারিত বিবরণে
নামছে

6

তুষ , 11 বাইট

S÷ȯ→Π§foε⌋ḣ

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

          ḣ   Range from 1 to input
     §foε⌋    Keep only those whose gcd with the input is 1
    Π         Product
  ȯ→          Plus 1
S÷            Integer division with input

ব্যাখ্যা যোগ করুন? আমার মনে হয় আপনি সেখানে একটি নিফটি আলগো পেয়েছেন ...
এরিক দি আউটগলফার

3

গণিত, 91 বাইট

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

@ বিলস্টটিহান দয়া করে অন্যের উত্তর ( প্রাসঙ্গিক মেটা আলোচনা ) সরাসরি সম্পাদনা করবেন না । আপনার যদি গল্ফ করার পরামর্শ থাকে তবে দয়া করে পরিবর্তে একটি মন্তব্য দিন!
জংহওয়ান মিন

@ জংহওয়ানমিন হ্যাঁ, আমি লক্ষ্য করেছি যে সম্পাদনা! নতুন ব্যবহারকারীদের নিয়মগুলি সাহায্য করার জন্য ধন্যবাদ
J42161217

3

পাইথ , 11 বাইট

/h*Ff>2iTQS

এখানে চেষ্টা করুন!


কিভাবে?

  • /h*Ff>2iTQS - সম্পূর্ণ প্রোগ্রাম।

  • S- অন্তর্ভুক্ত ব্যাপ্তি তৈরি করুন [1, ইনপুট]

  • f - ফিল্টার রাখুন:

    • iTQ - ইনপুট সহ যার জিসিডি।

    • >2- কম দুটি (নিম্নলিখিত যেকোন দ্বারা প্রতিস্থাপিত করা যেতে পারে: হয় q1, !t)

  • *F- বারবার গুণ করা। অন্য কথায়, তালিকার পণ্য।

  • h - 1 দ্বারা পণ্য বৃদ্ধি।

  • / - ইনপুট সহ মেঝে বিভাগ।

টিএল; ডিআর : [1, ইনপুট] সীমাতে ইনপুটটিতে সমস্ত কপিরাইট পান , তাদের পণ্য পান, এটি বৃদ্ধি করুন এবং ইনপুট দ্বারা ভাগ করুন।



2

জে, 33 বাইট

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

এটি অন্য যে কোনও কিছুর চেয়ে উন্নতি দেখার অনুরোধ। আমি প্রথমে একটি স্পষ্ট সমাধান চেষ্টা করেছি, তবে এটি এর চেয়ে দীর্ঘ ছিল।

ব্যাখ্যা

এটি মিঃ এক্সকোডারের সমাধানটি জেতে মোটামুটি সহজ অনুবাদ is

এটি অনলাইন চেষ্টা করুন!



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

জাভাস্ক্রিপ্ট (ES6), 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 বাইট সংরক্ষণ করা হয়েছে, সুতরাং এটি আগের তুলনায় ছোট মানগুলির জন্য ব্যর্থ হতে পারে।


By০ বাইট (যদিও এখনও এটিতে আমার পুরো সেট টেস্ট চালানোর সুযোগ হয়নি):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
শেগি

@ শেগি ওয়েল, আমি এটি আবার দেখার জন্য অনুপ্রাণিত হয়েছিলাম, তবে আমি নিশ্চিত নই যে আপনি কী প্রত্যাশা করেছিলেন ...
নীল

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, ফলাফল মেঝে এবং স্পষ্টভাবে আউটপুট।


এন = 25 এর জন্য এটি 1654529071288638400 ফিরে আসে এবং এটি ভুল হবে কারণ এটি হবে 1654529071288638505
রোসলুপি

@ রোসলুপি: চ্যালেঞ্জ লেখকের দ্বারা নিশ্চিত হয়েছে, আমাদের 32-বিটের বেশি সংখ্যক হ্যান্ডেল করার দরকার নেই।
শেগি

1

এক্সিয়াম, 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)

কিছু প্রকারের যোগ করুন, উনলগফ এবং ফলাফল and

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

জাভাস্ক্রিপ্ট (ES6), 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>

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