এটি কোন সীমাবদ্ধ আবেলীয় দল?


12

বিবরণ

এমন একটি ফাংশন লিখুন f(m, G)যা তার আর্গুমেন্টকে ম্যাপিং হিসাবে গ্রহণ করে mএবং স্বতন্ত্র, অ-নেতিবাচক পূর্ণসংখ্যার একটি সেট / তালিকা G

mGনতুন পূর্ণসংখ্যার সাথে জোড় সংখ্যক মানচিত্র তৈরি করা উচিত G। ( G, m) একটি সসীম অ্যাবেলিয়ান গ্রুপ গঠনের গ্যারান্টিযুক্ত তবে এর কোনও উপাদানই Gপরিচয় হতে পারে।

একটি গুরুত্বপূর্ণ উপপাদ্য রয়েছে যা বলে:

[প্রতিটি সীমাবদ্ধ আবেলীয় গোষ্ঠী] প্রাইম পাওয়ার অর্ডারের চক্রীয় গোষ্ঠীর সরাসরি পণ্যটির কাছে বিস্ময়কর।

fঅবশ্যই [p1, ... pn]এইভাবে আরোহণের ক্রমতে প্রধান শক্তিগুলির একটি তালিকা ফেরত দিতে হবেজি Z_p1 বার থেকে আইসমোর্ফিক হয় ... বার Z_pn

উদাহরণ

  • f((a, b) → (a+b) mod 4, [0, 1, 2, 3])[4]প্যারামিটারগুলি গ্রুপ জেড 4 এর বর্ণনা হিসাবে ফিরে আসবে ।

  • f((a, b) → a xor b, [0, 1, 2, 3])ফেরত পাঠাবেন [2, 2], যেমন পরামিতি একটি গোষ্ঠীর isomorphic বর্ণনা জেড 2 × জেড 2

  • f((a, b) → a, [9])ফিরে আসা উচিত [], প্যারামিটারগুলি তুচ্ছ গ্রুপের বর্ণনা হিসাবে; অর্থাত্, শূন্য চক্রীয় গোষ্ঠীর পণ্য।

  • mনিম্নলিখিত হিসাবে সংজ্ঞা দিন :

    (a, b) → (a mod 3 + b mod 3) mod 3
           + ((floor(a / 3) + floor(b / 3)) mod 3) * 3
           + ((floor(a / 9) + floor(b / 9)) mod 9) * 9
    

    তারপরে f(m, [0, 1, ..., 80])ফিরে আসা উচিত [3, 3, 9], কারণ এই গ্রুপটি জেড 3 × জেড 3 × জেড 9 এর আইসোমোরফিক

বিধি

  • mহয় কোনও ফাংশন (বা কোনও ফাংশনের ফাংশন পয়েন্টার) হতে পারে Int × Int → Int, বা অভিধানের G × Gনতুন উপাদানের সাথে ম্যাপিংয়ের অভিধান হতে পারে G

  • fবিপরীত ক্রমে এর পরামিতি নিতে পারে, অর্থাত আপনি এটি প্রয়োগ করতেও পারেন f(G, m)

  • আপনার বাস্তবায়ন তাত্ত্বিকভাবে ইচ্ছামত বৃহত ইনপুট জন্য কাজ করা উচিত , কিন্তু আসলে দক্ষ হতে হবে না।

  • কোনও ধরণের বিল্ট-ইন ব্যবহার করার ক্ষেত্রে কোনও সীমাবদ্ধতা নেই।

  • স্ট্যান্ডার্ড বিধি প্রযোজ্য। বাইটস মধ্যে সংক্ষিপ্ত কোড।

লিডারবোর্ড

আপনার স্কোর বোর্ডে উপস্থিত হওয়ার জন্য, এটি এই ফর্ম্যাটে হওয়া উচিত:

# Language, Bytes


যদি mঅভিধান হওয়ার অনুমতি দেওয়া হয়, তবে আপনি কি পরীক্ষাগুলির পাশাপাশি অভিধানগুলি প্রদান করতে পারেন?
মার্টিন এেন্ডার

আমি এটি বিবেচনা করেছি, তবে তারা বেশ বড়, বিশেষত শেষ কেস (হাজার হাজার কী-মান জোড়), এবং আমি তাদের পক্ষে খুব ভাল ফর্ম্যাটটি ভাবতে পারি না। উত্তরদাতাদের পক্ষে ফাংশন সংজ্ঞাগুলি অনুলিপি করা এবং তারপরে অভিধানগুলি নিজেই তৈরি করা (এর মতো কিছু দিয়ে for a in G: for b in G: d[(a, b)] = m(a, b)) করা সহজ।
লিন

আমি মনে করি এটি সঠিক। কী চলছে তা যাচাই করার জন্য আমি আপনার পেস্টটির
লিন

সাহায্য করার জন্য এটি প্রায় আপনার মাথা মোড়ানো: এটি বিন্যাসে trits সঙ্গে তিন নম্বর করে পরিচালিত AABC, triples তাদের চিকিত্সা (A, B, C), pairwise উপরন্তু মডিউল সঙ্গে (9, 3, 3)
লিন

ওহ, আমি আমার (খুব বোকা) ভুলটি বুঝতে পেরেছি। আপনার স্নিপেটের জন্য আপনাকে ধন্যবাদ!
flawr

উত্তর:


5

মতলব, 326 বাইট

কিছু গ্রুপ তত্ত্বের সাথে ধারণাটি বেশ সহজ: এখানে টিএল; ডিআর গ্রুপের উপাদানগুলির সমস্ত সম্ভাব্য ক্রম গণনা করুন। তারপরে একটি নির্দিষ্ট প্রাইম পাওয়ার অর্ডারের বৃহত্তম উপগোষ্ঠীটি খুঁজে বের করুন এবং এটিকে গ্রুপ থেকে বের করে "ফ্যাক্টরাইজ করুন", ধুয়ে ফেলুন, পুনরাবৃত্তি করুন।

function r=c(h,l)

                            %factorize group order
N=numel(L);
f=factor(N);
P=unique(f);                %prime factors
for k=1:numel(P);
    E(k)=sum(f==P(k));    %exponents of unique factors
end;

                            %calculate the order O of each element
O=L*0-1; 
l=L;
for k=2:N+1;

    l=h(l,L);

    O(l==L & O<0)=k-1
end;

%%

O=unique(O);               % (optional, just for speedupt)
R=[];
                           % for each prime,find the highest power that
                           % divides any of the orders of the element, and
                           % each time substract that from the remaining
                           % exponent in the prime factorization of the
                           % group order
for p=1:nnz(P);                          % loop over primes
    while E(p)>1;                        % loop over remaining exponent
        for e=E(p):-1:1;                 % find the highest exponent
            B=mod(O,P(p)^e)==0;          
            if any(B)
                R=[R,P(p)^e];            % if found, add to list
                O(B)=O(B)/(P(p)^e);
                E(p)=E(p)-e;
                break;
            end;
        end;
    end;
    if E(p)==1;
        R=[R,P(p)];
    end;
end;
r=sort(R)

উদাহরণ ইনপুট:

L = 0:3;
h=@(a,b)mod(a+b,4);
h=@(a,b)bitxor(a,b);
L = 0:80;
h=@(a,b)mod(mod(a,3)+mod(b,3),3)+mod(floor(a/3)+floor(b/3),3)*3+ mod(floor(a/9)+floor(b/9),9)*9; 

গল্ফ সংস্করণ:

function r=c(h,l);N=numel(L);f=factor(N);P=unique(f);for k=1:numel(P);E(k)=sum(f==P(k));end;O=L*0-1;l=L;for k=2:N+1;l=h(l,L);O(l==L&O<0)=k-1;end;R=[];for p=1:nnz(P);while E(p)>1;for e=E(p):-1:1;B=mod(O,P(p)^e)==0; if any(B);R=[R,P(p)^e]; O(B)=O(B)/(P(p)^e);E(p)=E(p)-e;break;end;end;end;if E(p)==1;R=[R,P(p)];end;end;r=sort(R)

1

জিএপি , 159 111 বাইট

জিএপি আমাদের কেবল একটি গুণ টেবিল দ্বারা একটি গ্রুপ তৈরি করতে এবং এর অ্যাবেলিয়ান আক্রমণকারীদের গণনা করার অনুমতি দেয়:

ai:=    # the golfed version states the function w/o assigning it
function(m,G)
  local t;
  t:=List(G,a->List(G,b->Position(G,m(a,b))));
  # t is inlined in the golfed version
  return AbelianInvariants(GroupByMultiplicationTable(t));
end;

পুরানো সংস্করণ

জেনারেটর জি এবং সম্পর্কের সাথে চূড়ান্তভাবে উপস্থাপিত গোষ্ঠী হ'ল আমরা যে গোষ্ঠীটি (জি, এম) দিয়ে শুরু করেছি তা হ'ল গ্রুপ (জি, মি) থেকে (বি, জি থেকে সকলের জন্য) জি rators আমরা এটিকে তৈরি করতে এবং এর অ্যাবেলিয়ান আক্রমণকারীদের জিএপি দিয়ে গণনা করতে পারি:

ai:=    # the golfed version states the function w/o assigning it
function(m,G)
  local F,n,rels;
  n:=Size(G);
  F:=FreeGroup(n);
  rels:=Union(Set([1..n],i->
                Set([1..n],j->
                  F.(i)*F.(j)/F.(Position(G,m(G[i],G[j]))) ) ));
  # rels is inlined in the golfed version
  return AbelianInvariants(F/rels);
end;

উদাহরণ

m1:=function(a,b) return (a+b) mod 4; end;
# I don't feel like implementing xor
m3:=function(a,b) return 9; end;
m4:=function(a,b)
  return (a+b) mod 3 # no need for inner mod
         + ((QuoInt(a,3)+QuoInt(b,3)) mod 3) * 3
         + ((QuoInt(a,9)+QuoInt(b,9)) mod 9) * 9;
  end;

এখন আমরা করতে পারি:

gap> ai(m1,[0..3]);
[ 4 ]

আসলে, আমরা পূর্ণসংখ্যার তালিকা ব্যবহারের মধ্যে সীমাবদ্ধ নেই। সঠিক ডোমেন ব্যবহার করে, আমরা কেবল সাধারণ প্লাস ব্যবহার করতে পারি:

ai(\+,List(Integers mod 4));
[ 4 ]

সুতরাং আমি মূলত দ্বিতীয়টি উদাহরণটি ব্যবহার করে বলতে পারি যে এটির গ্রুপটি 2 টি উপাদান সহ ক্ষেত্রের উপরে 2 মাত্রিক ভেক্টর স্পেসের অ্যাডিটিভ গ্রুপের কাছে বিস্ময়কর:

gap> ai(\+,List(GF(2)^2));
[ 2, 2 ]

এবং বাকী উদাহরণগুলি:

gap> ai(m3,[9]);
[  ]
gap> ai(m4,[0..80]);
[ 3, 3, 9 ]

অতিরিক্ত মন্তব্য

পুরাতন সংস্করণে, মিটারকে জি এর জন্য একটি গ্রুপ রচনা সংজ্ঞা দেওয়ার দরকার নেই যদি মি (ক, বি) = মি (এ, সি), যে কেবল খ = সি বলে। সুতরাং আমরা করতে পারে ai(m1,[0..5])এবং ai(m3,[5..15])। এই ক্ষেত্রে নতুন সংস্করণটি ভয়াবহভাবে ব্যর্থ হবে, যেমন উভয় সংস্করণ যেমন এম জিতে নেই এমন মানগুলি ফিরিয়ে দেয় will

যদি (জি, মি) অ্যাবেলিয়ান না হয় তবে আমরা এর অ্যাবেলিয়ানাইজড সংস্করণটির বিবরণ পাই, এটিই এর বৃহত্তম আবেলীয় ফ্যাক্টর গ্রুপ:

gap> ai(\*,List(SymmetricGroup(4)));
[ 2 ]

এটি AbelianInvariantsসাধারণত এটির জন্য ব্যবহৃত হয়, আমরা সাধারণত কল করি AbelianInvariants(SymmetricGroup(4))

গল্ফ সংস্করণ

function(m,G)return AbelianInvariants(GroupByMultiplicationTable(List(G,a->List(G,b->Position(G,m(a,b))))));end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.