যাদুকরী মডুলো স্কোয়ারগুলি


11

আমি সংখ্যা তত্ত্বের একটি বড় অনুরাগী। সংখ্যার তত্ত্বের একটি বড় বিষয় হ'ল মডুলার গাণিতিক; সংজ্ঞাটি হ'ল এবং কেবল যদি মি \ মিড আব হয় । একটি মজাদার জিনিসটি ক্ষমতাগুলিতে উত্থাপন করা হয়: বিশেষত যখন মডিউলাসটি একটি মৌলিক সংখ্যা। বিশেষ করে, এটা প্রমাণিত হয়েছে যে যদি করেছে একটি এবং মি অপেক্ষাকৃত মৌলিক (ব্যতীত ভাগ কোনো সাধারণ কারণ 1 তারপর অস্তিত্ব আছে) একটি সংখ্যা যেমন যে একটি ^ ই \ equiv 1 \ গেলিক ভাষার মিabmodmmabam1eae1modm

আমি একটি উদাহরণ দিয়ে অনুশীলনটি কী তা ব্যাখ্যা করব। আসুন একটি মডুলাস নিই । প্রোগ্রাম বা ফাংশনের সম্ভাব্য আউটপুটটি হ'ল:m=7

3 2 6 4 5 1
2 4 1 2 4 1
6 1 6 1 6 1
4 2 1 4 2 1
5 4 6 2 3 1
1 1 1 1 1 1

প্রতিটি সারিটি সেই সারিতে প্রথম সংখ্যার শক্তির একটি তালিকা: প্রথম সারিটি , যা সমান মডুলো । উপরের বর্গক্ষেত্রের দ্বিতীয় সারিটি শেষ সারি পর্যন্ত , এটেসেটেরার শক্তি, যা কেবল শক্তি ।3,32,33,,363,2,6,4,5,1721

এটি একটি যাদুকরী মডুলো স্কোয়ার কারণ:

  • বর্গটি প্রতিসম হয়; অর্থাৎ, ম কলামটি ম সারির সমান ।আমিআমি
  • থেকে পর্যন্ত সমস্ত মান অন্তত একবার উপস্থিত হয়।1মি-1

নীচে কেবলমাত্র জন্য অন্যান্য বৈধ আউটপুট রয়েছে , টির ক্ষমতার সাথে শুরু করে :মি=75

5 4 6 2 3 1
4 2 1 4 2 1
6 1 6 1 6 1
2 4 1 2 4 1
3 2 6 4 5 1
1 1 1 1 1 1

চ্যালেঞ্জ

এমন একটি ফাংশন বা প্রোগ্রাম তৈরি করুন যা একটি মৌলিক প্রদত্ত একটি pযাদুকরী মডুলো বর্গক্ষেত্রকে বোঝায়, পাশের দৈর্ঘ্য সহ একটি বর্গক্ষেত্র p-1, যেমন প্রতিটি সারি সারিতে প্রথম উপাদানটির ধারাবাহিক শক্তিগুলির একটি তালিকা এবং কলামগুলির জন্য একই। এর মধ্যে 0এবং সমস্ত সংখ্যার মধ্যে pঅবশ্যই উপস্থিত থাকতে হবে এবং স্কোয়ারটিতে কেবলমাত্র এই ব্যাপ্তির মধ্যে সংখ্যা থাকতে পারে।

ইনপুটটি একটি সংখ্যা বা একটি স্ট্রিং এবং আউটপুট আসকি, ম্যাট্রিক্স, অ্যারের অ্যারে (কোনও যুক্তিসঙ্গত বিন্যাস) হতে পারে।

এটি কোড-গল্ফ, তাই সংক্ষিপ্ততম কোডটি জয়ী।


সম্পর্কিত OEIS ক্রম: A001918 (উপরের-বাম কোণে সর্বনিম্ন কার্যকর মান)।
আর্নল্ড

2
একজনএকজন1,1পিএকজনআমি,=একজন1,1আমিগেলিক ভাষারপি

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

উত্তর:


5

জেলি , 13 10 বাইট

-3 ধন্যবাদ নিক কেনেডি কে ধন্যবাদ

এর মতো অনুভূত হয় পুনরাবৃত্তি কোড হওয়া উচিত গলফ-সক্ষম, কিন্তু আমি করেছি পরিচালনা করা হয়নি এটা ...

*€Ṗ%µQƑƇḢị

এটি অনলাইন চেষ্টা করুন! (গ্রিড হিসাবে পাদলেখের চমত্কার বিন্যাস)

কিভাবে?

*€Ṗ%µQƑƇḢị - Link: integer, p
 €         - for each n in [1..p]
*          -   exponentiate with:
  Ṗ        -     pop = [1..p-1]
           - ...i.e [[1^1,1^2,...,1^(p-1)],[2^1,2^2,...,2^(p-1)],...,[....,p^(p-1)]]
   %       - modulo p
    µ      - start a new monadic chain (call that list of lists X)
       Ƈ   - keep those which:
      Ƒ    -   are invariant under:
     Q     -     de-duplicate
        Ḣ  - head
         ị - index into the list of lists X


আহা, এখন আমি ধীর বোধ করছি; ধন্যবাদ!
জোনাথন অ্যালান

3

কাঠকয়লা , 36 বাইট

≔E…¹θ﹪Xι…¹θIθηE⊟Φη⁼¹№ι¹⪫E§η⊖ι◧IλL⊖θ 

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। দ্রষ্টব্য: ট্রেলিং স্পেস ব্যাখ্যা:

≔E…¹θ﹪Xι…¹θIθη

সূচকগুলি (মডুলো ) এর অ্যারে p-1দ্বারা একটি তৈরি করুন ।p-11..p-11..p-1p

E⊟Φη⁼¹№ι¹

সারিগুলির একটির উপরে মানচিত্র যা ঠিক একটি রয়েছে 1

⪫E§η⊖ι◧IλL⊖θ 

নির্বাচিত সারি দ্বারা প্রদত্ত ক্রমে সারিগুলি পুনরায় সাজান এবং আউটপুট ফর্ম্যাট করুন।




2

জাভাস্ক্রিপ্ট (ES7),  91  86 বাইট

এই সংস্করণটি মডিউল প্রয়োগ করার আগে শক্তিগুলি গণনা করার চেষ্টা করে এবং নির্ভুলতা হ্রাসের কারণে পি11 জন্য ব্যর্থ হয়। এটি অন্যথায় নীচের মন্তব্য করা সংস্করণের মতো একই যুক্তি ব্যবহার করছে।

f=(p,k)=>(g=k=>[...Array(i=p-1)].map(_=>k**++i%p))(k).sort()[1]>1?g(k).map(g):f(p,-~k)

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


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

এই সংস্করণটি উচ্চতর ইনপুট মানগুলিকে সমর্থন করার জন্য মডিউলার এক্সপেনসেন্টেশন ব্যবহার করে।

f=(p,k)=>(g=k=>[...Array(p-1)].map(_=>n=n*k%p,n=1))(k).sort()[1]>1?g(k).map(g):f(p,-~k)

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

কিভাবে?

প্রথম সারিটি সন্ধান করা হচ্ছে

প্রদত্ত 1<পি , আমরা সাহায্যকারী ফাংশন ব্যবহার করার কম্পিউট একটি(এন)=এনগেলিক ভাষারপি জন্য 1এন<পি

g = k =>              // k = input
  [...Array(p - 1)]   // generate an array of size p - 1
  .map(_ =>           // for each entry in there:
    n = n * k % p,    //   update n to (n * k) mod p
    n = 1             //   starting with n = 1
  )                   // end of map()

এনএকটি(এন)=11

g(k).sort()[1] > 1

এটি অভিধান সংক্রান্ত ক্রমেও কাজ করে - যা এর ডিফল্ট আচরণ sort()- কারণ:

  • 1
  • 11

উদাহরণ:

পি=17 :

  • =1
    • একটি1=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
    • [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
  • =2
    • একটি2=[2,4,8,16,15,13,9,1,2,4,8,16,15,13,9,1]
    • [1,1,13,13,15,15,16,16,2,2,4,4,8,8,9,9]
  • =3
    • একটি3=[3,9,10,13,5,15,11,16,14,8,7,4,12,2,6,1]
    • [1,10,11,12,13,14,15,16,2,3,4,5,6,7,8,9]

ম্যাট্রিক্স নির্মাণ

()() ম্যাট্রিক্সের সারি গড়ে তুলতে।

এই অংশটি কেবল এইভাবে লেখা যেতে পারে:

g(k).map(g)

.indexOf(1)>p-3ওভার 3 বাইট সংরক্ষণ .every
নিল

@ নীল ধন্যবাদ তবে আমি একটি ভাল রাতের ঘুমের পরে আরও একটি ছোট উপায় খুঁজে পেয়েছি। :)
আর্নল্ড

2

Zsh , 117 90 বাইট

b=$1
c=(eval set -- '$[x**'{1..$[b-1]}%b\])
for ((;${#${(u)@}}-b+1;++x))$c
for x;$c&&<<<$@

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

Myশ্বর আমার আত্মার উপর করুণা করুন। এখানে অনেক খারাপ অভ্যাস রয়েছে, এখানে আমাকে সবচেয়ে বড় অপরাধীকে ব্যাখ্যা করতে দিন:

c=(eval set -- '$[x**'{1..$[b-1]}%b\])
                      {1..$[b-1]}        # brace expansion, expands immediately
               '$[x**'           %b\]    # string literals, expand during eval
   eval set --                           # sets the positional parameters
c=(                                   )  # defines c to the words contained

উদাহরণস্বরূপ b=4:

c=(eval set -- '$[x**'{1..$[b-1]}%b\])
c=(eval set -- '$[x**'{1..3}%b\]     )                # $[b-1] => 3
c=(eval set -- '$[x**1%b]' '$[x**2%b]' '$[x**3%b]' )  # brace expansion

অবশেষে, কোথায় $c প্রোগ্রামের বাকি অংশে উপস্থিত হয়, অ্যারের উপাদানগুলি হিসাবে মূল্যায়ন করা হয় eval set -- ....

শেষ অবধি, ${#${(u)@}}অবস্থানগত পরামিতিগুলি (যেমন: একটি চক্র আছে / আছে সেখানে) অনন্য উপাদান গণনা করে1 কি?)

নীচে 117 বাইট উত্তরের সাথে সম্পর্কিত মন্তব্যগুলি।


আমাদের যে চ্যালেঞ্জগুলি কাটিয়ে উঠতে হবে:

  • কোনও বহুমাত্রিক বা নেস্টেড অ্যারে নেই। পরিবর্তে আমরা স্ট্রিংগুলি একটি লুপে পেয়েছিলাম সেগুলি মুদ্রণ করি।
  • প্রদত্ত সারিতে একাধিক 1 টি থাকলে পরীক্ষার জন্য বিকল্পগুলি:
    • ${#${(M)a:#1}: ম্যাচটি :#সরিয়ে (M)দেয় এবং ম্যাচটি বিপরীত করে। সুতরাং, এটি অ্যারে এর সংখ্যা ( ${# }) এ প্রসারিত হবে 1। দুর্ভাগ্যক্রমে এই সম্প্রসারণটি আমরা এখানে লুপের জন্য ব্যবহৃত পাটিগণিতের সাথে সুন্দরভাবে খেলছি না। যদি এটি হয় তবে এটি সম্ভবত একটি বাইট সংরক্ষণ করতে পারে।
    • ${${:-1}:*a}: এটি সিঙ্গেলটন 1এবং সেটের মধ্যবর্তী সেট ছেদটি a। এটি 1অ্যারেতে পাওয়া গেলে এটি এককটিতে প্রসারিত হবে । এই বিকল্পটি ব্যবহার করে, আমরা এখানে একটি অক্ষর সংরক্ষণ করি, তবে 1শেষ পর্যন্ত 1 টি সর্বশেষ সারিতে এবং কলামে যুক্ত করা বন্ধ করে দিতে হবে ।
f(){ # f [element] [modular base], puts powers up to n-2 into array $a
    a=()
    for i ({1..$[$2-2]})
        a+=($[$1**i%$2])
}
a=(1)                     # put 1 in a to force first loop iteration
for ((;${${:-1}:*a};))    # test for 1 in array $a
    f $[++x] $1           # increment x, iterate through all elements mod $1
for y ($a 1){             # for all elements in the [last array, 1]
    f $y $1               # put that row in $a
    <<<$a\ 1              # print out $a with 1 appended (space-delimited string)
}

1

পার্ল 6 , 65 57 বাইট

{.[|.first(*.Set+2>$_)]}o{.&{@=(($++X**1..^$_)X%$_)xx$_}}

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

কেবলমাত্র বর্গক্ষেত্রকেই আউটপুট দেওয়ার সম্ভবত কিছু উপায় রয়েছে তবে এই একই প্রক্রিয়াটি প্রশ্নের মধ্যে উল্লিখিত হয়, তালিকাগুলিকে তাদের তালিকা অনুসারে প্রথম তালিকায় সাজিয়ে দেয় যা কেবল 1 এর ইনপুট -1 এর অনুমান। তালিকাগুলির তালিকা হিসাবে ফিরে আসে।

বিটিডাব্লু, এর চারপাশে প্রচুর জোকস রয়েছে, পার্ল 6 এর বিরক্তিকর সীমাবদ্ধতাগুলি বনাম অ্যারে এবং অজ্ঞাতনীয় ভেরিয়েবলগুলির সাথে জড়িত কিছু খুঁজে পাওয়ার চেষ্টা করছে।

ব্যাখ্যা:

                               $++               xx$_    # Map 0 to i-1 to
                              (   X**1..^$_)             # n, n^2, n^3... n^(i-1)
                             (              X%$_)        # All modulo i
{                      }o{.&{                        }}  # Pass to the next function
 .[                   ]    # Index into that list of lists
   |.first(          )     # The list of the first list that
           *.Set+2>$_        # Has all the elements in the range 1 to i-1


1

05 এ বি 1 ই , 19 16 বাইট

LεI<LmI%}ÐΘOÏн<è

-3 ধন্যবাদ বাইট @Emigna

এটি অনলাইনে ব্যবহার করে দেখুন (পাদচরণ 2D তালিকাটি প্রিন্ট করতে হবে)।

ব্যাখ্যা:

L          # Create a list in the range [1, (implicit) input]
 ε         # Map each number `y` in the list to:
  I<L      #  Create a list in the range [1, input-1]
     m     #  Get number `y` to the power of each number in this list
      I%   #  Take modulo-input on each number
         # After the map: triplicate this modified matrix
   ΘO      # Get the amount of 1s in each row
     Ï     # And only leave the rows with exactly one 1
      н    # Then only leave the first row which contains a single 1
       <   # Decrease each value by 1 to make it 0-indexed
        è  # And index each into the rows of the modified matrix to create a new matrix
           # (which is output implicitly as result)

1
LεI<LmI%}ÐΘOÏн<è 16 বাইট জন্য।
এমিগানা

@ এমিগনা ধন্যবাদ! বুঝতে পারিনি যে আমার চেয়ে যথেষ্ট হবে UΣXyk
কেভিন ক্রুইজসেন



0

এপিএল (এনএআরএস), 29 টি চর, 58 বাইট

{k←⍵∣⍺*⍳⍵-1⋄⊃{m∣k*⍵}¨⍳¯1+m←⍵}

পরীক্ষা:

  f←{k←⍵∣⍺*⍳⍵-1⋄⊃{m∣k*⍵}¨⍳¯1+m←⍵}
  3 f 7
3 2 6 4 5 1
2 4 1 2 4 1
6 1 6 1 6 1
4 2 1 4 2 1
5 4 6 2 3 1
1 1 1 1 1 1
  5 f 7
5 4 6 2 3 1
4 2 1 4 2 1
6 1 6 1 6 1
2 4 1 2 4 1
3 2 6 4 5 1
1 1 1 1 1 1 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.