Ityক্যের আদিম শিকড়


11

zএকটি জটিল সংখ্যা হতে দিন । নির্দিষ্ট ধনাত্মক পূর্ণসংখ্যার জন্য এবং কোনও ধনাত্মক পূর্ণসংখ্যার জন্য unityz ক্যের এক নবতম আদিম মূলn k < n

চ্যালেঞ্জ

একটি সম্পূর্ণ প্রোগ্রাম বা ফাংশন লিখুন যা nইনপুট হিসাবে ধনাত্মক পূর্ণসংখ্যা দেওয়া হলে .ক্যের সমস্ত নবম আদিম শিকড়কে আউটপুট করে। আপনি এগুলিকে পোলার আকারে আউটপুট দিতে পারেন ( e^θiবা e^iθ, যুক্তিটি কমপক্ষে 2 দশমিক স্থানের সাথে দশমিক হওয়া উচিত) বা আয়তক্ষেত্রাকার ফর্ম ( a + biবা অনুরূপ ফর্ম, বাস্তব এবং কল্পিত অংশগুলিও দশমিক হওয়া উচিত) এবং সেগুলি আপনার ভাষার তালিকায় আউটপুট করা হতে পারে / অ্যারে বিন্যাস বা শূণ্যস্থান বা নিউলাইন দ্বারা পৃথক সংখ্যার একটি স্ট্রিং হিসাবে। বিল্ট-ইনগুলি যা unityক্যের নবম মূল বা unityক্যের নবম আদিম শিকড় গণনা করে তা অনুমোদিত নয়।

এটি , তাই বাইট জেতে সংক্ষিপ্ততম কোড।

নমুনা ইনপুট এবং আউটপুট

6 -> e^1.05i, e^-1.05i # polar form
3 -> e^2.094395i, e^-2.094395i # any number of decimal places is OK as long as there are more than 2
8 -> 0.707 + 0.707i, 0.707 - 0.707i, -0.707 + 0.707i, -0.707 - 0.707i # rectangular form
1 -> 1 + 0i # this is OK
1 -> 1 # this is also OK
4 -> 0 + i, 0 - i # this is OK
4 -> i, -i # this is also OK

সুতরাং + -i z^ 8 = 1 এর সমাধান নয়?
রোজলুপি

উত্তর:


9

জেলি, 11 9 বাইট

-2 বাইটের জন্য @ ডেনিসকে ধন্যবাদ!

Rg=1O÷H-*

আমি 1 থেকে N পর্যন্ত সমস্ত unityক্যের মূলের মধ্যে পার্থক্যটি ভাঁজ করে N এ কপিরাইট নম্বরগুলি তৈরি করতে চেয়েছিলাম, কিন্তু আমি @ ডেনিসের পদ্ধতিটি কীভাবে ব্যবহার করেছি তা বুঝতে পারি না।

Rg=1O÷H-*         Monadic chain:          6
R                 Range                   [1,2,3,4,5,6]
 g                Hook gcds with range    [1,2,3,2,1,6]
  =1              [gcds equal to one]     [1,0,0,0,1,0]
    O             Replicate indices       [1,5]
     ÷H           Divide by half of N     [1/3,5/3]
       -          Numeric literal: - by itself is -1.
        *         Take -1 to those powers [cis π/3,cis 5π/3]

এখানে চেষ্টা করুন । জেলির এই সংস্করণে বৈধ , তবে ফেব্রুয়ারি 1, 2016 এর পরে সংস্করণগুলিতে নাও থাকতে পারে।


4

জেলি , 14 বাইট

Rg=1O°÷×ı360Æe

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

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

z- র = ই 2tπi একজন এন রুট 1 যদি এবং কেবল যদি T = K / এন কিছু পূর্ণসংখ্যা জন্য

z- র হয় আদিম যদি এবং কেবল যদি এবং এন coprime হয়।

Rg=1O°÷×ı360Æe  Main link. Input: n

R               Yield [1, ..., n].
 g              Compute the GCDs of reach integer and n.
  =1            Compare the GCDs with 1.
    O           Get all indices of 1's.
                This computes all the list of all k in [1, ..., n] 
                such that k and n are coprime.
     °          Convert the integers to radians.
      ÷         Divide the results by n.
       ×ı360    Multiply the quotient by the imaginary number 360i.
            Æe  Map exp over the results.

2

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

n->cis(360deg2rad(filter(k->gcd(k,n)<2,1:n))/n)

এটি একটি ল্যাম্বদা ফাংশন যা একটি পূর্ণসংখ্যা গ্রহণ করে এবং জটিল ফ্লোটগুলির একটি অ্যারে প্রদান করে। এটি কল করতে, এটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন। এটি ডেনিসের জেলি উত্তর হিসাবে একই পদ্ধতির ব্যবহার করে।

Ungolfed:

function f(n::Int)
    # Get the set of all k < n : gcd(k,n) = 1
    K = filter(k -> gcd(k,n) < 2, 1:n)

    # Convert these to radian measures
    θ = deg2rad(K)

    # Multiply by 360, divide by n
    θ = 360 * θ / n

    # Compute e^iz for all elements z of θ
    return cis(θ)
end

2

রুবি, 46 বাইট

এটি থমাস কোয়ার জেলি উত্তরটির একটি অ "গল্ফিং ভাষা" প্রয়োগ implementation

->n{(1..n).map{|j|1i**(4.0*j/n)if j.gcd(n)<2}}

Ungolfed:

def r(n)
  (1..n).each do |j|
    if j.gcd(n) == 1    # if j is coprime with n, then this will be a primitive root of unity
      p 1i**(4.0*j/n)   # print the fourth power of i**(j/n), i.e. the root of unity
    end
  end
end

2

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

:1-tGYf1X-!\Xpg)2j*YP*G/Ze!

রিলিজ (9.3.1) ব্যবহার করে , যা এই চ্যালেঞ্জের চেয়ে আগের।

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

(অনলাইন সংকলকটি একটি নতুন রিলিজ ব্যবহার করে তবে কোডটি 9.3.1 রিলিজে চলে এবং একই ফলাফল দেয়)

ব্যাখ্যা

তিনটি প্রধান পদক্ষেপ রয়েছে:

  1. সমস্ত শিকড়ের সাথে মিল রেখে 0, পূর্ণসংখ্যা তৈরি করুন 1, ..., N-1
  2. আদিম শিকড়ের সাথে সম্পর্কিত কেবল পূর্ণসংখ্যা রাখুন। এগুলি প্রধান ফ্যাক্টরের পচন ব্যবহার করে সনাক্ত করা হয় N
  3. একটি কাল্পনিক ক্ষতিকারক দ্বারা প্রকৃত শিকড় উত্পাদন।

কোড:

:1-           % 1. Implicit input "N". Produce vector [0,1,...,N-1]
t             %    duplicate
GYf           % 2. Prime factors of N
1X-           %    remove factor "1" if present (only if N==1)
!\            %    all combinations of [0,1,...,N-1] modulo prime factors of N
Xpg           %    logical "and" along the prime-factor dimension
)             %    index into original vector [0,1,...,N-1] to keep only primitive roots
2j*YP*G/Ze    % 3. Imaginary exponential to produce those roots
!             %    transpose for better output format

1

মতলব 49 বাইট

n=input('');q=0:n-1;exp(i*2*pi/n.*q(gcd(n,q)==1))

প্রথম সময়ে টাস্কটি পেলেন না, তবে এখন এটি এখানে। নিম্নলিখিত ফলাফল:

6
ans =
    0.5000 + 0.8660i   0.5000 - 0.8660i

3
আপনার উত্তরটি কেবল আদিম নয়, unityক্যের সমস্ত শিকড় প্রদর্শন করে ।
flawr

@ অবৈধ মন্তব্যের জন্য ধন্যবাদ, আমি প্রথম কাজটি পেলাম না। আমি সমাধান সম্পাদনা করেছি
ব্রেকিঙ্কজ

1

ES6, 96 বাইট

n=>[...Array(n).keys()].filter(i=>g(i,n)<2,g=(a,b)=>a?g(b%a,a):b).map(i=>'e^'+Math.PI*2*i/n+'i')

পোলার ফর্মটি স্বল্পতম আউটপুট ছিল।


1

PARI / GP, 41 বাইট

বেশ সহজ সরল: 1 থেকে n এর মধ্যে নম্বরগুলি খুঁজে বের করুন যা কপিরাইমে এন হয়, তারপরে

n->[exp(2*Pi*I*m/n)|m<-[1..n],gcd(n,m)<2]

কিছুটা ছোট পথ থাকতে হবে তবে আমি এটিই খুঁজে পেলাম।

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