एकता की मूल जड़ें


11

आज्ञा zदेना एक जटिल संख्या है। एक निश्चित सकारात्मक पूर्णांक के लिए और किसी भी सकारात्मक पूर्णांक के लिए एकताz का एक मूल आदिम मूल हैn k < n

चुनौती

एक पूर्ण कार्यक्रम या फ़ंक्शन लिखें, जो nइनपुट के रूप में एक सकारात्मक पूर्णांक दिया गया है, एकता के सभी मूल आदिम जड़ों को आउटपुट करता है। आप उन्हें ध्रुवीय रूप में आउटपुट कर सकते हैं ( e^θiया e^iθ, तर्क कम से कम 2 दशमलव स्थानों के साथ एक दशमलव होना चाहिए) या आयताकार रूप ( a + biया एक समान रूप, वास्तविक और काल्पनिक भागों को भी दशमलव होना चाहिए), और वे आपकी भाषा की सूची में आउटपुट हो सकते हैं / सरणी प्रारूप या रिक्त स्थान या newlines द्वारा अलग संख्या के साथ एक स्ट्रिंग के रूप में। बिल्ट-इन कि एकता की nth जड़ों की गणना या एकता की nth आदिम जड़ों की अनुमति नहीं है।

यह , इसलिए बाइट्स जीत में सबसे छोटा कोड है।

नमूना इनपुट और आउटपुट

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

तो + आई-जेड का समाधान नहीं हैं ^ 8 = 1?
रोजलूपी

जवाबों:


9

जेली, 11 9 बाइट्स

-2 बाइट्स के लिए @ डेनिस को धन्यवाद!

Rg=1O÷H-*

मैं 1 से N तक की एकता की सभी जड़ों पर सेट अंतर को मोड़कर संख्याओं को 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 है एक n वें की जड़ 1 यदि और केवल यदि टी = कश्मीर / n कुछ पूर्णांक के लिए कश्मीर

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 बाइट्स

यह थॉमस केवा के जेली जवाब का एक गैर-"गोल्फ भाषा" कार्यान्वयन है ।

->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

MATL , 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
आपका उत्तर एकता की सभी जड़ों को प्रदर्शित करता है, न कि केवल आदिम लोगों को।
दोष

@flawr टिप्पणी के लिए धन्यवाद, मुझे पहले काम नहीं मिला। मैंने समाधान का संपादन किया
22

1

ईएस 6, 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 तक की हैं

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

वहाँ कुछ छोटा रास्ता है, लेकिन यह सबसे अच्छा मुझे मिल सकता था।

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