মণ্ডলীর জন্য একটি সূত্র


10

চীনা বাকি উপপাদ্য মডুলার গাণিতিক বেশ উপযোগী হতে পারে।

উদাহরণস্বরূপ, সংযুক্ত সম্পর্কের নিম্নলিখিত সেটটি বিবেচনা করুন:

একত্রিত

সমষ্টির সম্পর্কের সেটগুলির জন্য, যেখানে সমস্ত ঘাঁটি ( 3, 5, 7এই উদাহরণে) একে অপরের সাথে সহ-প্রধান হয়, সেখানে ঘাঁটির পণ্যগুলির nমধ্যে একটি এবং একমাত্র পূর্ণসংখ্যা থাকবে 1( 3*5*7 = 105উদাহরণস্বরূপ) অন্তর্ভুক্ত যা সম্পর্কগুলিকে সন্তুষ্ট করে ।

এই উদাহরণে, সংখ্যাটি হবে 14, এই সূত্র দ্বারা উত্পন্ন:

সূত্র

2, 4, and 0উপরের উদাহরণ থেকে দেওয়া হয় যেখানে ।

70, 21, 15হয় কোফিসিয়েন্টস সূত্রের, এবং তারা ঘাঁটি উপর নির্ভরশীল 3, 5, 7

সূত্রের সহগের হিসাব করতে ( 70, 21, 15আমাদের উদাহরণে) ঘাঁটির একটি সেট জন্য, আমরা নিম্নলিখিত পদ্ধতিটি ব্যবহার করি।

aঘাঁটির একটি সেট প্রতিটি সংখ্যার জন্য :

  1. হিসাবে চিহ্নিত প্রতিটি অন্যান্য ঘাঁটির পণ্যটি সন্ধান করুন P
  2. এর মধ্যে প্রথম ভাগ করে যখন ভাগ করা হয় তখন তার Pবাকী অংশগুলি ছেড়ে দেয় । এটির সহগ ।1aa

উদাহরণস্বরূপ, বেসের সাথে সঙ্গতিপূর্ণ সহগের গণনা করার জন্য 3, আমরা অন্যান্য সমস্ত ঘাঁটির (যেমন 5*7 = 35) পণ্য খুঁজে পাই এবং তারপরে সেই পণ্যটির প্রথম একাধিক খুঁজে পাই 1যা বেস দ্বারা বিভক্ত হয়ে যাওয়ার পরে বাকি অংশ ছেড়ে যায়।

এই ক্ষেত্রে, 35একটি বাকি ছেড়ে 2যখন দ্বারা বিভক্ত 3, কিন্তু 35*2 = 70পাতার একটি বাকি 1যখন দ্বারা বিভক্ত 3, তাই 70জন্য সংশ্লিষ্ট সহগ হয় 3। একইভাবে, যখন ভাগ করা হয় তখন তার 3*7 = 21একটি অবশিষ্ট অংশ ছেড়ে 1যায় 5এবং যখন ভাগ হয় তখন তার 3*5 = 15অবশিষ্ট অংশ ছেড়ে 1যায় 7

সংক্ষেপে

aসংখ্যার একটি সেট প্রতিটি সংখ্যার জন্য:

  1. হিসাবে চিহ্নিত অন্যান্য সংখ্যাগুলির সমস্ত পণ্যটি খুঁজুন P
  2. এর মধ্যে প্রথম ভাগ করে যখন ভাগ করা হয় তখন তার Pবাকী অংশগুলি ছেড়ে দেয় । এটির সহগ ।1aa

চ্যালেঞ্জ

  • চ্যালেঞ্জটি হল, দুটি বা ততোধিক ঘাঁটির একটি সেটের জন্য, সহগতির সহগের সেট খুঁজে পাওয়া।
  • বেসগুলির সেটটি যুগলভাবে সহ-প্রাইম হওয়ার গ্যারান্টিযুক্ত এবং প্রতিটি বেস 1 এর চেয়ে বড় হওয়ার গ্যারান্টিযুক্ত।
  • আপনার ইনপুটটি ইনপুট [3,4,5]বা স্পেস-বিভাজিত স্ট্রিং "3 4 5"বা তবে আপনার ইনপুটগুলির কাজ হিসাবে পূর্ণসংখ্যার তালিকা is
  • আপনার আউটপুটটি হয় হয় পূর্ণসংখ্যার বা স্পেস-বিভাজিত স্ট্রিংয়ের তালিকা হওয়া উচিত যা সহগের সেটকে বোঝায়।

পরীক্ষার মামলা

input             output
[3,5,7]           [70,21,15]
[2,3,5]           [15,10,6]
[3,4,5]           [40,45,36]
[3,4]             [4,9]
[2,3,5,7]         [105,70,126,120]
[40,27,11]        [9801,7480,6480]
[100,27,31]       [61101,49600,56700]
[16,27,25,49,11]  [363825,2371600,2794176,5583600,529200]

এই চ্যালেঞ্জটি লেখার ক্ষেত্রে সহায়তার জন্য লিকি নুনকে অনেক ধন্যবাদ। সর্বদা হিসাবে, সমস্যাটি যদি অস্পষ্ট হয় তবে দয়া করে আমাকে জানান। শুভকামনা এবং ভাল গল্ফিং!


ইনপুটটিতে সর্বদা 3 নম্বর থাকবে?
এক্সনর

@ এক্সনর নোপ পরীক্ষার মামলা সম্পাদিত।
শার্লক

উত্তর:


5

হাস্কেল, 61 55 53 বাইট

f x=[[p|p<-[0,product x`div`n..],p`mod`n==1]!!0|n<-x]

একটি ফাংশন সংজ্ঞা fদেয় যা ইনপুট নেয় এবং সংখ্যার তালিকা হিসাবে আউটপুট দেয়।

f x=[                                          |n<-x]  (1)
              product x                                (2)
                       `div`n                          (3)

প্রথমে আমরা ইনপুট (1) এ সমস্ত পূর্ণসংখ্যার উপর লুপ করি। তারপরে আমরা সমস্ত সংখ্যার (2) এর প্রোডাক্ট নিয়ে থাকি এবং n এর দ্বারা বিভাজন করে কেবল অ- nপূর্ণসংখ্যার পণ্য পাই , যা P(3)।

           [0,               ..]                       (4)
     [p|p<-                     ,p`mod`n==1]           (5)
                                            !!0        (6)

তারপরে আমরা ফলাফল ( P) শূন্য (4) থেকে শুরু হওয়া একটি ব্যাপ্তির ধাপের মান হিসাবে ব্যবহার করি । আমরা ফলাফলটি গ্রহণ করি [0, P, 2P, 3P, ...]এবং এটি মানগুলিতে ফিল্টার করি যার জন্য একটি Mod-n অপারেশনের ফলাফল এক (5)। অবশেষে, আমরা প্রথম উপাদানটি গ্রহণ করি, যা অলস মূল্যায়নের জন্য (6) ধন্যবাদ দেয়।

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


1
হাস্কেল আপনাকে স্বাগতম! আমি মনে করি আপনার quotএকটি হতে পারে div, এবং headহতে পারে !!0
xnor

4

জেলি , 11 7 বাইট

P:*ÆṪ%P

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

পটভূমি

আসুন পি এবং একটি কঠোরভাবে ইতিবাচক, হতে coprime পূর্ণসংখ্যার।

প্রশ্নে দুটি পদক্ষেপে প্রক্রিয়া - এর গুণিতক খোঁজার পি পাতার একটি বাকি যে 1 যখন দ্বারা বিভক্ত একটি নিম্নলিখিত সঙ্গতি সমীকরণ দ্বারা বর্ণনা করা যায় -।

রৈখিক সমষ্টি সমীকরণ

দ্বারা অয়লার-ফার্মার উপপাদ্য , আমরা

ইউলার-ফার্ম্যাট উপপাদ্য

যেখানে ule ইউলারের মোট কার্যকারিতা বোঝায় । এই ফলাফল থেকে, আমরা নিম্নলিখিতটি অনুমান করি।

রৈখিক সমষ্টি সমীকরণের সূত্র

অবশেষে, যেহেতু চ্যালেঞ্জটির জন্য আমাদের Px গণনা করা দরকার , আমরা তা পর্যবেক্ষণ করি

চূড়ান্ত ফলাফলের জন্য সূত্র

যেখানে Pa সমস্ত মডুলির পণ্য হিসাবে গণনা করা যায়।

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

P:*ÆṪ%P  Main link. Argument: A (list of moduli)

P        Yield the product of all moduli.
 :       Divide the product by each modulus in A.
   ÆṪ    Apply Euler's totient function to each modulus.
  *      Raise each quotient to the totient of its denominator.
     %P  Compute the remainder of the powers and the product of all moduli.

2

জে, 13 বাইট

*/|5&p:^~*/%]

@ ডেনিসের আশ্চর্যজনক উত্তরের ভিত্তিতে ।

ব্যবহার

কিছু পরীক্ষার ক্ষেত্রে প্রসারিত পূর্ণসংখ্যার হিসাবে ইনপুট লাগবে x

   f =: */|5&p:^~*/%]
   f 3 5 7
70 21 15
   f 40x 27 11
9801 7480 6480
   f 16x 27 25 49 11
363825 2371600 2794176 5583600 529200

ব্যাখ্যা

*/|5&p:^~*/%]  Input: list B
         */    Reduce B using multiplication to get the product of the values
            ]  Identity function, get B
           %   Divide the product by each value in B, call the result M
   5&p:        Apply the totient function to each value in B, call the result P
       ^~      Raise each value in M to the power of its corresponding value in P
*/             The product of the values in B
  |            Compute each power modulo the product and return

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




1

জেলি, 14 13 বাইট

P:×"Ḷð%"’¬æ.ḷ

@ ডেনিসকে একটি বাইট সংরক্ষণ করে !

চ্যালেঞ্জ বিশেষে বর্ণিত প্রক্রিয়াটি ব্যবহার করে। ইনপুটটি বেসগুলির একটি তালিকা এবং আউটপুটটি সহগের তালিকা।

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার ক্ষেত্রে যাচাই করুন

ব্যাখ্যা

P:×"Ḷð%"’¬æ.ḷ  Input: a list B
P              Get the product of the list
 :             Divide it by each value in the B, call it M
    Ḷ          Get a range from 0 to k for k in B
  ×"           Vectorized multiply, find the multiples of each M
     ð         Start a new dyadic chain. Input: multiples of M and B
      %"       Vectorized modulo, find the remainders of each multiple by B
        ’      Decrement every value
               If the remainder was 1, decrementing would make it 0
         ¬     Logical NOT, zeros become one and everything else becomes 0
            ḷ  Get the multiples of M
          æ.   Find the dot product between the modified remainders and the multiples
               Return

1

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

a.map(e=>[...Array(e).keys()].find(i=>p*i/e%e==1)*p/e,p=a.reduce((i,j)=>i*j))

আমি বর্ধিত ইউক্লিডিয়ান অ্যালগরিদম চেষ্টা করেছিলাম তবে এটি 98 বাইট লাগে:

a=>a.map(e=>(r(e,p/e)+e)%e*p/e,p=a.reduce((i,j)=>i*j),r=(a,b,o=0,l=1)=>b?r(b,a%b,t,o-l*(a/b|0)):o)

মানগুলি যদি সমস্ত মৌলিক হয় তবে ES7 এটি 56 বাইটে করতে পারে:

a=>a.map(e=>(p/e%e)**(e-2)%e*p/e,p=a.reduce((i,j)=>i*j))

1

পাইথন + সিমপি, 71 বাইট

from sympy import*
lambda x:[(prod(x)/n)**totient(n)%prod(x)for n in x]

এটি আমার জেলি উত্তর থেকে অ্যালগরিদম ব্যবহার করে । I / O সিমপাই সংখ্যাগুলির তালিকা আকারে।


1

পাইথন 2, 87 84 বাইট

অ্যালগরিদমের একটি সহজ বাস্তবায়ন। গল্ফিং পরামর্শ স্বাগত জানাই।

a=input();p=1
for i in a:p*=i
print[p/i*j for i in a for j in range(i)if p/i*j%i==1]

একটি সম্পূর্ণ প্রোগ্রাম 3 বাইট সংরক্ষণ করতে হবে।
ডেনিস


0

জিএপি , 51 বাইট

গ্যাপের একটি ফাংশন রয়েছে যা অনুপ্রেরণামূলক উদাহরণটির সাথে ChineseRem([2,5,7],[2,4,0])তুলনা করতে পারে, তবে এটি সহগগুলি পাওয়া এত সহজ করে না। আমরা এন-তম স্থানে থাকা একটির সাথে তালিকার ব্যবহার করে এবং দ্বিতীয় যুক্তি হিসাবে অন্য অবস্থানে শূন্য করতে N-th সহগ পেতে পারি। সুতরাং আমাদের এই তালিকা তৈরি করতে হবে এবং তাদের সবার জন্য ফাংশনটি প্রয়োগ করতে হবে:

l->List(Basis(Integers^Size(l)),b->ChineseRem(l,b))

0

ব্যাচ, 148 বাইট

@set p=%*
@set/ap=%p: =*%
@for %%e in (%*)do @for /l %%i in (1,1,%%e)do @call:l %%e %%i
@exit/b
:l
@set/an=p/%1*%2,r=n%%%1
@if %r%==1 echo %n%

0

আসলে, 14 বাইট

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

;π;)♀\;♂▒@♀ⁿ♀%

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

                 Implicit input a.
;                Duplicate a.
 π;)             Take product() of a, duplicate and rotate to bottom.
    ♀\           Integer divide the product by each element of a. Call this list b.
      ;♂▒        Take that list, duplicate, and get the totient of each element.
         @♀ⁿ     Swap and take pow(<item in b>, <corresponding totient>)
            ♀%   Modulo each item by the remaining duplicate product on the stack.
                 Implicit return.

আমার পাইথন উত্তরের উপর ভিত্তি করে আরও একটি উত্তর 22 বাইটে। গল্ফিং পরামর্শ স্বাগত জানাই। এটি অনলাইন চেষ্টা করুন!

;π╖`╝╛╜\╛r*"╛@%1="£░`M

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

            Implicit input a.
;π╖         Duplicate, take product of a, and save to register 0.
`...`M      Map over a.
  ╝           Save the item, b, in register 1.
  ╛╜\         product(a) // b. Call it P.
  ╛r          Take the range [0...b].
  *           Multiply even item in the range by P. Call this list x.
  "..."£░     Turn a string into a function f.
              Push values of [b] where f returns a truthy value.
    ╛@%         Push b, swap, and push <item in x> % b.
    1=          Does <item> % b == 1?
            Implicit return.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.