एक संख्या ज्ञात करें जो सभी पूर्णांक mod ​​q बनाता है


9

पर विचार करें पूर्णांकों सापेक्ष qजहां qप्रधानमंत्री, एक जनरेटर किसी भी पूर्णांक है 1 < x < qताकि x^1, x^2, ..., x^(q-1)सभी कवर q-1पूर्णांक के बीच 1और q-1। उदाहरण के लिए, पूर्णांक मॉडुलो 7 (जिसे हम लिखते हैं Z_7) पर विचार करें। फिर 3, 3^2 mod 7 = 2, 3^3 = 27 mod 7 = 6, 3^4 = 81 mod 7 = 4, 3^5 = 243 mod 7 = 5, 3^6 = 729 mod 7 = 1सभी मानों 3, 2, 6, 4, 5, 1को शामिल करता है जो सभी पूर्णांकों 1..6को आवश्यकतानुसार कवर करता है।

कार्य कोड लिखना है जो एक इनपुट लेता है nऔर एक जनरेटर को आउटपुट करता है Z_n। आप किसी भी बिलिन या लाइब्रेरी का उपयोग नहीं कर सकते हैं जो आपके लिए ऐसा करता है।

आपके कोड के प्रदर्शन पर एकमात्र प्रतिबंध यह है कि आपने इसे पूरा करने के लिए परीक्षण किया होगा n = 4257452468389

ध्यान दें कि की शक्ति का 2^n मतलब 2है n। यह ^घातांक का प्रतिनिधित्व करता है।


हम्म ... 1 < x < qचुनौती को आसान इमो बनाता है।
आउटगोल्फ जूल

@EriktheOutgolfer मुझे यकीन नहीं है कि मुझे पता है कि आपका क्या मतलब है? वे सभी विशिष्ट पूर्णांक हैं जो 0 या 1. नहीं हैं

मेरा मतलब है कि यह जितना संभव है उससे कहीं अधिक आसान है ... या शायद पीपीसीजी पर कुछ निष्क्रिय क्षण।
सितंबर को आउटगोल्फ जूल

3
लेकिन मुझे लगता है कि लोगों को बड़ी संख्या में इसे पूरा करने के लिए परीक्षण करने की आवश्यकता अनावश्यक है ... मूल रूप से टियो सिर्फ मेमोरी-एरर होगा।
11

@ लेम्बिक क्या कोई ऐसा मामला है जहां एक निश्चित संख्या के लिए कोई जनरेटर नहीं है? कुछ परीक्षण मामले अच्छे होंगे।
श्री Xcoder

जवाबों:


13

पायथ, 16 15 बाइट्स

f-1m.^T/tQdQPtQ

परीक्षण सूट

यदि p इनपुट है, तो हम जानते हैं कि g ^ (p-1) = 1 mod p, इसलिए हमें बस g ^ a! = 1 mod p को किसी भी छोटे a के लिए जांचना होगा। लेकिन यह संभव होने के लिए p-1 का एक कारक होना चाहिए, और उस संपत्ति के साथ किसी भी बहु के पास भी वह संपत्ति होगी, इसलिए हमें केवल उस g ^ ((p-1) / q) को जांचना होगा! = 1 पी के सभी प्रमुख कारकों के लिए 1 मॉड पी। इसलिए, हम बढ़ते हुए क्रम में सभी पूर्णांक g की जांच करते हैं, जब तक कि हम एक काम नहीं करते।

स्पष्टीकरण:

f-1m.^T/tQdQPtQ
f                  Return the first value T such that the following is truthy:
            PtQ    Take the prime factorization of the input - 1.
   m               Map those prime factors to
       /tQd        Take the input - 1 divided by the factor
    .^T    Q       Raise T to that exponent mod input,
                   performed as modular exponentiation, for performance.
 -1                Check that 1 is not found among the results.

बड़िया!

क्या आपका कोड गुणनखंडन करता है?

@Lembik यह ( PtQहिस्सा) करता है।
जैग


-3
%MATLAB CODE
%Program to generate Z_n for an integer n
n = input('Enter a number to find modulo')
q = input ('Enter a prime number greater than the number you wished to find modulo')
if n>=q 
   fprintf('Error')
   exit(1)
end
for R=1:q-1
    fprintf(rem(n.^R, q))
    fprintf('\n')
end

1
यह सही समस्या का समाधान नहीं है। उदाहरण के लिए, आपका कोड एक इनपुट लेना चाहिए और एक आउटपुट देना चाहिए।

1
इसके अलावा, यह कोड बिल्कुल भी नहीं है। गोल्फ कोड को जितना संभव हो उतना छोटा करने की आवश्यकता है, ताकि आप इनपुट टेक्स्ट और रिक्त स्थान को समान संकेतों और इस तरह से हटा सकें।
कॉमरेड स्पार्कलपनी

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