ইউলারের মোট কার্যকারিতা গণনা করুন


27

পটভূমি

ইউলার totient ফাংশন φ(n)কম পুরো নম্বর সংখ্যা হিসেবে সংজ্ঞায়িত করা বা সমান nযে অপেক্ষাকৃত প্রধানমন্ত্রীর হয় n, যে, সম্ভাব্য মান রয়েছে তা গণনা xমধ্যে 0 < x <= nযার জন্য gcd(n, x) == 1। আমরা ছিল করেছি একটি কয়েক totient - সংশ্লিষ্ট চ্যালেঞ্জ সামনে, কিন্তু কখনও এক যা শুধু এটা গণক করা হয়।

পুরো সংখ্যাগুলিতে টোটেন্ট ফাংশনের ম্যাপিং হ'ল OEIS A000010

চ্যালেঞ্জ

একটি পূর্ণসংখ্যা দেওয়া হয়েছে n > 0, গণনা করুন φ(n)। আপনি কমান্ড-লাইন আর্গুমেন্ট, স্ট্যান্ডার্ড ইনপুট, ফাংশন আর্গুমেন্ট বা যুক্তিসঙ্গত যে কোনও কিছুর মাধ্যমে ইনপুট নিতে পারেন। আপনি স্ট্যান্ডার্ড আউটপুট, রিটার্ন মান, বা যুক্তিসঙ্গত অন্য কোনও মাধ্যমে আউটপুট দিতে পারেন give বেনামে ফাংশন গ্রহণযোগ্য। আপনি ধরে নিতে পারেন যে ইনপুটটি আপনার পূর্ণসংখ্যার সংরক্ষণের প্রাকৃতিক পদ্ধতিটি উপচে পড়বে না, উদাহরণস্বরূপ intসি তে, তবে আপনাকে অবশ্যই ইনপুটগুলি 255 পর্যন্ত সমর্থন করবে If

উদাহরণ

φ(1) => 1
φ(2) => 1
φ(3) => 2
φ(8) => 4
φ(9) => 6
φ(26) => 12
φ(44) => 20
φ(105) => 48

বাইট জিতে সংক্ষিপ্ত উত্তর। যদি আপনার ভাষা ইউটিএফ -8 ব্যতীত অন্য কোনও এনকোডিং ব্যবহার করে তবে আপনার উত্তরে এটি উল্লেখ করুন।


4
কুযাটি ছিল এই সেদিন। আমি মনে করি না যে পুনরাবৃত্তি অ্যাপ্লিকেশনটি যথেষ্ট পার্থক্য নিয়েছে, তবে কিছু হলে আমি অন্যটিটি বন্ধ করে দেই, কারণ আমিও মনে করি না যে পুনরাবৃত্ত অ্যাপ্লিকেশনটি কিছু যুক্ত করে। এটি বলেছিল যে, বৃহত্তর পার্থক্যটি হ'ল এটি যে কোনও বিল্ট-ইনগুলিকে অনুমতি দেয় এবং এইটি তা দেয় না।
মার্টিন ইন্ডার

বিল্ট-ইনগুলি বর্জন করা আপাতদৃষ্টিতে উত্তরের উপর কোনও প্রভাব ফেলবে না।
জুলি পেলেটিয়ার

2
@ জুলিপেল্টিয়ার কেন? : আমার ম্যাথামেটিকাল উত্তর অন্যথায় পারতাম 19 বাইট খাটোEulerPhi
মার্টিন Ender

@ জুলিপেলিটিয়ার জিসিডি অনুমোদিত কারণ জিসিডি গণনা করা উদ্দেশ্য সমাধান করা সমস্যা নয়। অবশ্যই, এই উত্তরগুলিতে বাইট সংখ্যা গণনা করতে পারে তবে এটি চ্যালেঞ্জটিকে আরও ভাল করে না। আমি স্পষ্ট করতে সম্পাদনা করব।
বকুল

উত্তর:


13

গণিত, 27 22 বাইট

Range@#~GCD~#~Count~1&

একটি নামবিহীন ফাংশন যা পূর্ণসংখ্যা গ্রহণ করে এবং প্রদান করে।

এখানে ব্যাখ্যা করার মতো খুব বেশি কিছু নেই, এটি ব্যতীত @ফাংশন কলগুলির উপসর্গ সংকেত এবং ~...~এটি (বাম-সহযোগী) ইনফিক্স নোটেশন, সুতরাং উপরেরটি একই রকম:

Count[GCD[Range[#], #], 1] &

11

এমএটিএল, 7 বাইট

t:Zd1=s

আপনি ট্রাইআইটিঅনলাইন করতে পারেন । সহজ ধারণা, 1 থেকে N তে একটি ভেক্টর তৈরি করুন এবং এন ( Zdডিগ্রি জিসিডি) দিয়ে প্রতিটি উপাদানের জিসিডি নিন। তারপরে, কোন উপাদানগুলি 1 এর সমান, এবং উত্তরটি পেতে ভেক্টরটির যোগফল নির্ধারণ করুন।


অন্তর্নিবিষ্ট _Zpযারা বিস্মিত তাদের জন্য।
ডেভিড

10

জে, 9 বাইট

(-~:)&.q:

এটি মোটামুটি ফাংশনগুলিতে জাসফটওয়ারের প্রবন্ধের ভিত্তিতে তৈরি ।

প্রদত্ত এন = পি 1 1পি 2 2 ∙∙∙ পি কে কে যেখানে পি কে এন এর প্রধান উপাদান, মোট ফাংশন φ ( n ) = φ ( পি 1 1 ) ∙ φ ( পি 2 ই) 2 ) ∙∙∙ φ ( পি কে কে ) = ( পি 1 - 1) পি 1 1 - 1 ∙ ( পি 2 - 1) পি 2e 2 - 1 ∙∙∙ ( পি কে - 1) পি কে কে - 1

ব্যবহার

   f =: (-~:)&.q:
   (,.f"0) 1 2 3 8 9 26 44 105
  1  1
  2  1
  3  2
  8  4
  9  6
 26 12
 44 20
105 48
   f 12345
6576

ব্যাখ্যা

(-~:)&.q:  Input: integer n
       q:  Prime decomposition. Get the prime factors whose product is n
(   )&     Operate on them
  ~:         Nub-sieve. Create a mask where 1 is the first occurrence
             of a unique value and 0 elsewhere
 -           Subtract elementwise between the prime factors and the mask
     &.q:  Perform the inverse of prime decomposition (Product of the values)

পুনরাবৃত্তির সাহায্যে জেতে আরও একটি সমাধান করার জন্য টোটেন্টটি গুণক হ'ল ব্যবহার করুন :)
লিকি নুন

@ লেকিউন আমি ফ্যাক্টরিংয়ের গল্ফ করার সহজ উপায় মনে করি না, যেহেতু পুনরাবৃত্তি ফর্মটি ব্যবহার করার [:*/@({.(^-(^<:)){:)2&p:জন্য 24 বাইট প্রয়োজন, এমনকি বিল্টিনটি প্রাইমস এবং তাদের এক্সপোজারগুলি পেতে। বা সম্ভবত একটি ছোট উপায় আছে এবং আমি এটি দেখতে না।
মাইল মাইল


7

হাস্কেল, 28 বাইট

f n=sum[1|1<-gcd n<$>[1..n]]

ধ্রুবকগুলির সাথে হাস্কেলের প্যাটার্ন মিলটি ব্যবহার করে । এখানে কৌশলগুলি গল্ফ করার জন্য মোটামুটি মানসম্পন্ন, তবে আমি সাধারণ দর্শকদের কাছে ব্যাখ্যা করব।

অভিব্যক্তি gcd n<$>[1..n]মানচিত্র gcd nসম্মুখের [1..n]। অন্য কথায়, এটা নির্ণয় gcdসঙ্গে nথেকে প্রতিটি সংখ্যা 1থেকে n:

[gcd n i|i<-[1..n]]

এখান থেকে পছন্দসই আউটপুট হ'ল 1প্রবেশের সংখ্যা , তবে হাস্কেলের কোনও countফাংশন নেই। filterকেবলমাত্র রাখার 1এবং ফলাফলটি নেওয়ার অদ্ভুত উপায় length, যা গল্ফ করার পক্ষে অনেক দীর্ঘ।

পরিবর্তে, ফলাফলটি তালিকার সাথে filterতালিকা অনুধাবন দ্বারা সিমুলেটেড হয় । সাধারণত, তালিকা বোধগম্য মানগুলির মতো চলকগুলিতে আবদ্ধ হয় , তবে হাস্কেল এক্ষেত্রে ধ্রুবকটির সাথে একটি প্যাটার্নের সাথে মিলে যায় ।[1|1<-l]l[x*x|x<-l]1

সুতরাং, প্রতিটি ম্যাচে [1|1<-l]একটি জেনারেট 1করে 1কার্যকরভাবে 1আসল তালিকার কেবলমাত্র বের করে নেওয়া । sumএটির কল করা তার দৈর্ঘ্য দেয়।


আমি মনে করি এটি প্রথম হাস্কেলের উত্তর যা আমি আসলে বুঝতে পারি। এটি দুর্দান্ত ভাষা, তবে এটি বেশিরভাগ অন্যদের থেকে আলাদা
বকুল

বাহ, আমি প্রত্যাশা করেছি যে প্যাটার্ন মিলটি বোধগমের তালিকাগুলিতে সম্পূর্ণরূপে হওয়া উচিত। কৌতুক জন্য ধন্যবাদ।
ড্যামিয়েন

7

পাইথন 2, 44 বাইট

f=lambda n,d=1:d/n or-f(d)*(n%d<1)-~f(n,d+1)

কম গল্ফড:

f=lambda n:n-sum(f(d)for d in range(1,n)if n%d<1)

সূত্র যে ভাজক এর ইউলার totients ব্যবহার nএকটি সমষ্টি আছে n:

এখানে চিত্র বর্ণনা লিখুন

ϕ(n)এরপরে মানটিকে nঅবিচ্ছিন্ন বিভাজনকারীদের তুলনায় বিয়োগ হিসাবে বিয়োগ হিসাবে গণনা করা যায় can কার্যকরভাবে, এটি পরিচয় ফাংশনে Möbius বিপরীতমুখী করছে । ম্যাবিয়াস ফাংশনটি গণনা করতে আমি গল্ফে একই পদ্ধতি ব্যবহার করেছি ।

একটি উন্নততর বেস কেস 1 বাইট সংরক্ষণ প্রাথমিক মান ছড়াতে জন্য ডেনিস ধন্যবাদ +nমধ্যে +1প্রত্যেকের জন্য nলুপ, সম্পন্ন -~



5

জে, 11 বাইট

+/@(1=+.)i.

ব্যবহার

>> f =: +/@(1=+.)i.
>> f 44
<< 20

>>STDIN কোথায় এবং STDOUT <<হয়।

ব্যাখ্যা

+/ @ ( 1 = +. ) i.
               │
   ┌───────────┴┐
 +/@(1=+.)      i.
   │
 ┌─┼──┐
+/ @ 1=+.
    ┌─┼─┐
    1 = +.

>> (i.) 44            NB. generate range
<< 0 1 2 3 4 ... 43
>> (+.i.) 44          NB. calculate gcd of each with input
<< 44 1 2 1 4 ... 1
>> ((1=+.)i.) 44      NB. then test if each is one (1 if yes, 0 if no)
<< 0 1 0 1 0 ... 1
>> (+/@(1=+.)i.) 44   NB. sum of all the tests
<< 20

আপনি উল্লম্ব গাছের উপস্থাপনাটি কীভাবে পেয়েছেন? আমি ভেবেছিলাম এটি কেবল অনুভূমিক উত্পাদিত হয়েছে।
মাইল

@ মাইলগুলি আমি নিজে এটি টাইপ করেছি।
ফুটো নুন

5

পাইথন> = 3.5, 76 64 58 বাইট

12 (!) বাইট বন্ধ করে গল্ফ করার জন্য LeakyNun ধন্যবাদ

6 বাইট বন্ধ গল্ফ করার জন্য Sp3000 ধন্যবাদ।

import math
lambda n:sum(math.gcd(n,x)<2for x in range(n))

পাইথন কতটা পঠনযোগ্য তা আমি পছন্দ করি। গল্ফনেসির মাধ্যমেও এটি উপলব্ধি করে।


1
lambda n:sum(gcd(n,x)<2for x in range(n))
ফাঁস নুন

ওহ, পাইথন অবশেষে gcdগণিত মডিউল যোগ ! আমি এটা জানতাম না।
রুবিক

5

রেজেক্স (ইসিএমএসক্রিপ্ট), 131 বাইট

কমপক্ষে -12 বাইটস ডেডকোডকে ধন্যবাদ (আড্ডায়)

(?=((xx+)(?=\2+$)|x+)+)(?=((x*?)(?=\1*$)(?=(\4xx+?)(\5*(?!(xx+)\7+$)\5)?$)(?=((x*)(?=\5\9*$)x)(\8*)$)x*(?=(?=\5$)\1|\5\10)x)+)\10|x

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

আউটপুট ম্যাচের দৈর্ঘ্য।

ECMAScript রেজেক্সগুলি কোনও কিছু গণনা করা অত্যন্ত কঠিন করে তোলে। লুপের বাইরে নির্ধারিত কোনও ব্যাকরিফ লুপ চলাকালীন স্থির থাকবে, লুপের অভ্যন্তরে নির্ধারিত কোনও ব্যাকরেফ লুপ করার সময় পুনরায় সেট করা হবে। সুতরাং, লুপ পুনরাবৃত্তির জুড়ে রাষ্ট্র বহন করার একমাত্র উপায় হ'ল বর্তমান ম্যাচের অবস্থানটি ব্যবহার করা। এটি একটি একক পূর্ণসংখ্যা এবং এটি কেবল হ্রাস করতে পারে (ভাল, অবস্থানটি বৃদ্ধি পায়, তবে লেজের দৈর্ঘ্য হ্রাস পায় এবং আমরা গণিত করতে পারি এটিই)।

এই বিধিনিষেধগুলি দেওয়া, কেবল কপিরাইট সংখ্যা গণনা অসম্ভব বলে মনে হচ্ছে। পরিবর্তে, আমরা সমষ্টিটি গণনা করতে এলারের সূত্র ব্যবহার করি ।

সিউডোকোডে এটি দেখতে কেমন দেখাচ্ছে তা এখানে:

N = input
Z = largest prime factor of N
P = 0

do:
   P = smallest number > P that’s a prime factor of N
   N = N - (N / P)
while P != Z

return N

এই সম্পর্কে দুটি সন্দেহজনক জিনিস আছে।

প্রথমত, আমরা ইনপুটটি সংরক্ষণ করি না, কেবলমাত্র বর্তমান পণ্য, তাই আমরা কীভাবে ইনপুটটির মূল কারণগুলি পেতে পারি? কৌশলটি হ'ল (এন - (এন / পি)) পি হিসাবে একই মূল উপাদানগুলি> পি হিসাবে রয়েছে It এটি নতুন প্রধান উপাদানগুলি পেতে পারে <পি, তবে আমরা সেগুলি এড়িয়ে চলি। মনে রাখবেন এটি কেবলমাত্র কার্যকর কারণ আমরা ছোট থেকে বড় পর্যন্ত প্রধান কারণগুলির উপর পুনরাবৃত্তি করি, অন্যভাবে যেতে ব্যর্থ হবে।

দ্বিতীয়ত, আমাদের লুপ পুনরাবৃত্তির দুটি সংখ্যা মনে রাখতে হবে (পি এবং এন, জেড এটি ধ্রুবক হওয়ার পরে গণনা করে না), এবং আমি কেবল বলেছিলাম যে এটি অসম্ভব! ধন্যবাদ, আমরা এই দুটি সংখ্যা একটি একক মধ্যে সাঁতার কাটা করতে পারেন। মনে রাখবেন, লুপের শুরুতে, এন সর্বদা জেডের একাধিক হবে, আর পি সর্বদা জেডের চেয়ে কম হবে Thus সুতরাং আমরা কেবল এন + পি মনে রাখতে পারি, এবং একটি মডুলোর সাহায্যে পি বের করতে পারি।

এখানে আরও কিছুটা বিশদ সিডো কোড রয়েছে:

N = input
Z = largest prime factor of N

do:
   P = N % Z
   N = N - P
   P = smallest number > P that’s a prime factor of N
   N = N - (N / P) + P
while P != Z

return N - Z

এবং এখানে মন্তব্য করা রেজেক্স:

# \1 = largest prime factor of N
# Computed by repeatedly dividing N by its smallest factor
(?= ( (xx+) (?=\2+$) | x+ )+ )

(?=
        # Main loop!
        (
                # \4 = N % \1, N -= \4
                (x*?) (?=\1*$)

                # \5 = next prime factor of N
                (?= (\4xx+?) (\5* (?!(xx+)\7+$) \5)? $ )

                # \8 = N / \5, \9 = \8 - 1, \10 = N - \8
                (?= ((x*) (?=\5\9*$) x) (\8*) $ )

                x*
                (?=
                        # if \5 = \1, break.
                        (?=\5$) \1
                |
                        # else, N = (\5 - 1) + (N - B)
                        \5\10
                )
                x
        )+
) \10

এবং একটি বোনাস হিসাবে ...

রেজেক্স (ECMAScript 2018, ম্যাচের সংখ্যা), 23 বাইট

x(?<!^\1*(?=\1*$)(x+x))

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

আউটপুট ম্যাচের সংখ্যা। ইসমাস্ক্রিপ্ট 2018 ভেরিয়েবল-দৈর্ঘ্যের লুক-ব্যাক (ডান-থেকে-বামে মূল্যায়ন) উপস্থাপন করেছে, যা ইনপুটটির সাহায্যে সমস্ত সংখ্যাকে সহজেই গণনা করা সম্ভব করে।

দেখা যাচ্ছে এটি স্বতন্ত্রভাবে লিকি নুনের রেটিনা দ্রবণ দ্বারা ব্যবহৃত একই পদ্ধতি এবং রেজেক্স এমনকি একই দৈর্ঘ্য ( এবং বিনিময়যোগ্য )। আমি এটি এখানে রেখে দিচ্ছি কারণ এটি আগ্রহী হতে পারে যে এই পদ্ধতিটি ECMAScript 2018 তে কাজ করে (এবং কেবলমাত্র নেট নয়)।

                        # Implicitly iterate from the input to 0
x                       # Don’t match 0
 (?<!                 ) # Match iff there is no...
                 (x+x)  # integer >= 2...
         (?=\1*$)       # that divides the current number...
     ^\1*               # and also divides the input

4

পার্ল 6 ,  26 24  22 বাইট

{[+] (^$^n Xgcd $n) X== 1}
{+grep 2>*,(^$_ Xgcd$_)}
{[+] 2 X>(^$_ Xgcd$_)}

ব্যাখ্যা:

{
  [+] # reduce using &infix:<+>
    2
    X[>] # crossed compared using &infix:«>»
    (
      ^$_    # up to the input ( excludes input )
      X[gcd] # crossed using &infix:<gcd>
      $_     # the input
    )
}

উদাহরণ:

#! /usr/bin/env perl6
use v6.c;

my  = {[+] 2 X>(^$_ Xgcd$_)};

say φ(1) # 1
say φ(2) # 1
say φ(3) # 2
say φ(8) # 4
say φ(9) # 6
say φ(26) # 12
say φ(44) # 20
say φ(105) # 48

say φ 12345 # 6576


4

জুলিয়া, 25 বাইট

!n=sum(i->gcd(i,n)<2,1:n)

এটি সহজ - sumফাংশন আপনাকে সংক্ষেপের আগে এটি প্রয়োগ করতে একটি ফাংশন দেয় - মূলত দৌড়ানোর সমতুল্য mapএবং তারপরে sum। এটি তুলনামূলকভাবে প্রাথমিক সংখ্যার চেয়ে কম সংখ্যাকে গণনা করে n


4

পাইথন 2, 57 বাইট

f=lambda n,k=1,m=1:n*(k>n)or f(n-(n%k<m%k)*n/k,k+1,m*k*k)

আইডিয়নে এটি পরীক্ষা করুন ।

পটভূমি

দ্বারা ইউলার পণ্যের সূত্র ,

ইউলারের পণ্য সূত্র

যেখানে ule ইউলারের মোট কার্যকারিতা বোঝায় এবং পি কেবলমাত্র মূল সংখ্যার চেয়ে পৃথক হয়।

প্রাইমগুলি সনাক্ত করতে, আমরা উইলসনের উপপাদ্যের একটি বাস্তবায়ন ব্যবহার করি :

উইলসনের উপপাদ্যটির প্রতীক

কিভাবে এটা কাজ করে

সব সময়, পরিবর্তনশীল মি k - 1 এর ফ্যাক্টরিয়াল এর বর্গক্ষেত্রের সমান হবে । আসলে, আমরা আর্গুমেন্টকে ডিফল্টর নাম দিয়েছিলাম কে = 1 এবং এম = 0! 2 = 1

যতক্ষণ না ≤ n , 0 তেn*(k>n) মূল্যায়ন করে নীচের কোডটি কার্যকর করা হয়।or

পুনরায় স্মরণ করুন যে মি প্রাইম হলে 1 এবং যদি 0 না দেয় তবে m%kফলন হবে । এর অর্থ এই যে সমর্পণ করা হবে সত্য যদি এবং উভয় শুধুমাত্র যদি একটি মৌলিক সংখ্যা এবং এক্স দিয়ে বিভাজ্য x%k<m%k

এই ক্ষেত্রে, এন / কে(n%k<m%k)*n/k ফলন দেয় এবং এটিকে এন থেকে বিয়োগ করে তার আগের মানটিকে এন (1 - 1 / কে) দিয়ে প্রতিস্থাপন করে , যেমন এলারের পণ্য সূত্রে। অন্যথায়, 0 এবং n ফলন অপরিবর্তিত থাকে।(n%k<m%k)*n/k

উপরে কম্পিউটিং করার পর, আমরা বাড়ায় k এবং সংখ্যাবৃদ্ধি মি এর 'পুরানো' মান 2 , এইভাবে মধ্যে পছন্দসই সম্পর্ক বজায় রাখার এবং মি , তারপর কল যাও recursively আপডেট আর্গুমেন্ট সহ।

একবার ছাড়িয়ে গেছে এন , n*(k>n)মূল্যায়ণ এন , যা ফাংশন দ্বারা ফিরিয়ে দেওয়া হয়।


4

রুবি, 32 বাইট

->n{(1..n).count{|i|i.gcd(n)<2}}

একটি ল্যাম্বডা যা পূর্ণসংখ্যা n নিয়ে যায় এবং কতগুলি পূর্ণসংখ্যা (1..n) এর সাথে এন সহ কপিরাইট হয় তা গণনা করে।


হ্যালো, এবং পিপিসিজিতে আপনাকে স্বাগতম! এটি একটি দুর্দান্ত প্রথম পোস্ট।
NoOneIsHere

প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! এটি একটি দুর্দান্ত প্রথম সমাধান, এটি চালিয়ে যান!
বকুল

ধন্যবাদ, আসলেই এটি সংক্ষিপ্ত নয়, আমি এটির উন্নতি করা সম্ভব কিনা তা অবাক করি।
রেডউইন রেড

3

ব্র্যাচল্যাগ , 25 বাইট

:{:1e.$pdL,?$pd:LcCdC}fl.

ব্যাখ্যা

ব্র্যাচল্যাগের এখনও কোনও জিসিডি অন্তর্নির্মিত নেই, তাই আমরা পরীক্ষা করে দেখি যে দুটি সংখ্যার কোনও প্রধান কারণ নেই।

  • প্রধান শিকারী:

    :{...}fl.             Find all variables which satisfy predicate 1 when given to it as
                          output and with Input as input.
                          Unify the Output with the length of the resulting list
    
  • ভবিষ্যদ্বাণী 1:

    :1e.                  Unify Output with a number between Input and 1
        $pdL              L is the list of prime factors of Output with no duplicates
            ,
             ?$pd:LcC     C is the concatenation of the list of prime factors of Input with
                          no duplicates and of L
                     dC   C with duplicates removed is still C
    


3

পাওয়ারশেল ভি 2 +, 72 বাইট

param($n)1..$n|%{$a=$_;$b=$n;while($b){$a,$b=$b,($a%$b)};$o+=!($a-1)};$o

পাওয়ারশেলের এটিতে একটি জিসিডি ফাংশন উপলব্ধ নেই, তাই আমাকে নিজের রোল করতে হয়েছিল।

এটি ইনপুট নেয় $n, তারপরে এর থেকে শুরু 1করে লুপগুলিতে $nপাইপ দেয় |%{...}। প্রতিটি পুনরাবৃত্তির আমরা দুটি সাহায্যকারী ভেরিয়েবল সেট $aএবং $bএবং তারপর একটি GCD চালানো whileলুপ। প্রতিটি পুনরাবৃত্তির আমরা যে চেক করছি $bঅ-শূন্য হয়, এবং তারপর সংরক্ষণ $a%$bকরতে $bএবং পূর্ববর্তী মান $bথেকে $aপরবর্তী লুপ জন্য। তারপরে আমরা আমাদের আউটপুট ভেরিয়েবলের $aসমান কিনা তা সংগ্রহ করি । লুপের জন্য একবার হয়ে গেলে, আমরা পাইপলাইনে রাখি এবং আউটপুট অন্তর্ভুক্ত।1$o$o

whileলুপটি কীভাবে কাজ করে তার উদাহরণ হিসাবে , বিবেচনা করুন $n=20এবং আমরা চালু $_=8। প্রথম চেক আছে $b=20, তাই আমরা লুপ লিখুন। আমরা প্রথমে গণনা করি $a%$bবা 8%20 = 8, যা সেট $bহয়ে যায় একই সাথে 20সেট হয়ে যায় $a। চেক করুন 8=0, এবং আমরা দ্বিতীয় পুনরাবৃত্তি লিখুন। তারপরে আমরা গণনা করি 20%8 = 4এবং সেট করে রাখি $b, তারপরে সেট $aকরুন 8। চেক করুন 4=0, এবং আমরা তৃতীয় পুনরাবৃত্তি লিখুন। আমরা গণনা করি 8%4 = 0এবং সেট করে রাখি $b, তারপরে সেট $aকরুন 4। পরীক্ষা করে দেখুন 0=0এবং আমরা লুপ থেকে প্রস্থান, তাই GCD (8,20) হয় $a = 4। সুতরাং, !($a-1) = !(4-1) = !(3) = 0তাই $o += 0এবং আমরা যে এক গণনা না।


3

ফ্যাক্টর, 50 বাইট

[ dup iota swap '[ _ gcd nip 1 = ] filter length ]

একটি সীমার (তোলে ফোঁটা ) এন আর curries এন একটি ফাংশন যা পায় মধ্যে GCD XN সব মানের জন্য 0 <= এক্স <= ঢ যদি ফলাফল, পরীক্ষার 1Gcd xn এর ফলাফল 1 ছিল কিনা তার মূল সীমাটি ফিল্টার করুন এবং এর দৈর্ঘ্য নিন


[ dup iota swap '[ _ gcd nip 1 = ] map sum ]6 বাইট সাশ্রয় করে (আমি মনে করি - ফ্যাক্টরের সাথে খুব অভিজ্ঞ নয়)।
বকুল

@bkul পরামর্শের জন্য ধন্যবাদ! : ডি দুর্ভাগ্যক্রমে, t/fফ্যাক্টরে সংখ্যার (চিহ্নগুলির) মধ্যে যা কিছু আছে তার কোনও সামঞ্জস্য নেই , সুতরাং এটি কার্যকর করার একমাত্র উপায় [ dup iota swap '[ _ gcd nip 1 = 1 0 ? ] map sum ]যা বর্তমান সমাধানের সমান সঠিক দৈর্ঘ্য is
বিড়াল

আহ, ডাং শক্তিশালী টাইপিং আবার স্ট্রাইক।
বুকুল

@bkul আচ্ছা, আমি শক্তিশালী টাইপিং এবং কৃতজ্ঞ আছি TYPED:মধ্যে বাস্তব ফ্যাক্টর কোড: পি
বিড়াল


2

রেটিনা, 36 29 বাইট

মার্টিন ইন্ডারকে 7 বাইট ধন্যবাদ

.+
$*
(?!(11+)\1*$(?<=^\1+)).

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

ব্যাখ্যা

দুটি ধাপ (আদেশ) রয়েছে।

প্রথম পর্যায়ে

.+
$*

এটি একটি সরল রেইগেক্স বিকল্প, অনেককে ইনপুট রূপান্তর করে।

উদাহরণস্বরূপ, 5রূপান্তরিত হবে 11111

দ্বিতীয় পর্যায়ে

(?!(11+)\1*$(?<=^\1+)).

এই রেজেক্স পজিশনের সাথে মেলে যা শর্তটি পূরণ করে (ইনপুট সহ সহকারী), এবং তারপরে ম্যাচের সংখ্যা ফেরত দেওয়ার চেষ্টা করে।


লুকবাইন্ডের ভিতরে লুকআপের ভিতরে না থাকলে ব্যাকট্র্যাক হয় না?
ফুটো নুন

লুকোয়ারাউন্ডগুলি সাধারণভাবে ব্যাকট্র্যাক করে না।
মার্টিন ইন্ডার

তাহলে কীভাবে রেজেক্স প্রতিটি বিভাজক পরীক্ষা করল?
ফুটো নুন

1
ওয়েল তারা কি অস্বীকার করা যতদিন না পর্যন্ত আপনি তাদের ছেড়ে না যায়। ইঞ্জিন যতক্ষণ লুকোচুরির অভ্যন্তরে থাকবে ততক্ষণ এই চেহারাটি মিলিয়ে দেওয়ার (বা নেতিবাচক চেহারাটির ক্ষেত্রে ব্যর্থ) করার জন্য যথাসাধ্য চেষ্টা করবে। তবে একবার দর্শনটি শেষ হয়ে গেলে, ইঞ্জিনের কিছু ব্যর্থ হওয়ার পরে এটিটিতে ব্যাকট্র্যাক হবে না (যদি না এটি তখনও দর্শনের সামনে জিনিসগুলি ব্যাকট্র্যাক শুরু করে এবং যাইহোক সবকিছুকে পুনরায় মূল্যায়ন করতে হয়)।
মার্টিন ইন্ডার

2

কমন লিস্প, 58 বাইট

(defun o(x)(loop for i from 1 to x if (=(gcd x i)1)sum 1))

এটি একটি সরল লুপ যা প্রদত্ত n এর 1 টি গণনা করে এবং gcd = 1 হলে যোগফলকে বাড়িয়ে দেয় আমি t ফাংশনটির নাম ব্যবহার করি কারণ t সত্যিকারের বুলিয়ান মান। প্রায় সংক্ষিপ্ত কিন্তু মোটামুটি সহজ নয়।


সিএল এর কি কোনও ধরণের বেনামি কাজ নেই?
বিড়াল

2

ম্যাটল্যাব / অষ্টাভে, 21 বাইট

@(n)sum(gcd(n,1:n)<2)

নামে একটি বেনামি ফাংশন তৈরি করে ansযা পূর্ণসংখ্যার সাথে nএকমাত্র ইনপুট হিসাবে ডাকা যেতে পারে :ans(n)

অনলাইন ডেমো


2

পাইথন 2 , 44 বাইট

lambda n:sum(k/n*k%n>n-2for k in range(n*n))

এটি "কপিরাইটস অব এন পর্যন্ত" এর উত্তর হিসাবে কপিরাইটগুলি সনাক্ত করতে একই পদ্ধতি ব্যবহার করে ।

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


1
এর সাথে, আমি দেখতে পাচ্ছি, n-1পরিবর্তে কোনও পণ্য যাচাই করার সামান্য সামঞ্জস্য 1, যা এটির জন্য কাজ করে n==1
janrjan জোহানসেন


1

আসলে, 11 বাইট

;╗R`╜g`M1@c

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

ব্যাখ্যা

;╗R`╜g`M1@c   register stack             remarks

                       44
;                      44 44
 ╗            44       44
  R           44       [1 2 3 .. 44]
       M      44       10                for example
    ╜         44       10 44
     g        44       2
              44       [1 2 1 .. 44]     gcd of each with register
        1     44       [1 2 1 .. 44] 1
         @    44       1 [1 2 1 .. 44]
          c   44       20                count

অন্তর্নির্মিত সহ

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


আপনি বিকল্পভাবে ;╗R`╜g1=`MΣএকই বাইট গণনার জন্য ব্যবহার করতে পারেন
মেগো

1

জাভাস্ক্রিপ্ট (ES6), 67 বাইট

f=n=>[...Array(n)].reduce(r=>r+=g(n,++i)<2,i=0,g=(a,b)=>b?g(b,a%b):a)

1

05 এ বি 1 ই, 7 বাইট

Lvy¹¿i¼

ব্যাখ্যা

Lv        # for each x in range(1,n)
  y¹¿     # GCD(x,n)
     i¼   # if true (1), increase counter
          # implicitly display counter

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


সম্ভবত এই সম্ভব যখন আপনি এটি পোস্ট করা, কিন্তু কিছু 5-byters এখন সম্ভব না ছিল: L€¿1¢; Lʒ¿}g; L€¿ΘO
কেভিন ক্রুইজসেন

1

এপিএল, 7 বাইট

+/1=⊢∨⍳

এটি একটি মোনাডিক ফাংশন ট্রেন যা ডানদিকে একটি পূর্ণসংখ্যা নেয়। এখানে পদ্ধতির সুস্পষ্ট একটি: সমষ্টি ( +/) ইনপুটটির GCD বারের সংখ্যা এবং 1 থেকে ইনপুট ( ⊢∨⍳) এর সংখ্যা 1 ( ) এর সমান 1=

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


1

হাস্কেল, 31 30 বাইট

\n->sum[1|x<-[1..n],gcd n x<2]

1 বাইট সংরক্ষণ করা হয়েছে, @ ড্যামিয়েনকে ধন্যবাদ।

Gcd = 1 দিয়ে মানগুলি নির্বাচন করে, প্রতিটিকে 1-এ মানচিত্র দেয়, তার পরে যোগফল গ্রহণ করে।


আপনি প্রতিস্থাপন করতে পারেন ==1দ্বারা<2
ডেমিয়েন

1

ব্যাচ, 151 145 144 বাইট

@echo off
set t=
for /l %%i in (1,1,%1)do call:g %1 %%i
echo %t%
exit/b
:g
set/ag=%1%%%2
if not %g%==0 call:g %2 %g%
if %2%==1 set/at+=1

সম্পাদনা করুন: অপ্রয়োজনীয় স্পেসগুলি সরিয়ে 4 বাইট সংরক্ষণ করা হয়েছে। ব্যবহার করে 1 বাইট সংরক্ষণ করা হয়েছে +=। ক্লিয়ারিং 1 বাইট সংরক্ষিত tযেমন +=যে ব্যাখ্যা হবে 0যাহাই হউক না কেন। @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ এর জন্য 1 বাইট সংরক্ষণ করা হয়েছে ᴏʟғᴇʀ

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