রেশনালসের ডট পণ্যটি সন্ধান করুন


31

আমি রাতের খাবারের জন্য বন্ধুর বাড়িতে ছিলাম এবং তারা একটি "প্রাইম-ফ্যাক্টর ভেক্টর স্পেস" ধারণাটি প্রস্তাব করেছিল। এই স্থান ধনাত্মক পূর্ণসংখ্যা একটি ভেক্টর হিসাবে প্রকাশ করা হয় যেমন যে এন ভেক্টর ম উপাদান যতবার হয় এন ম মৌলিক ভাগ সংখ্যা। (দ্রষ্টব্য যে এর অর্থ এই যে আমাদের ভেক্টরগুলির শর্তগুলির অসীম সংখ্যা রয়েছে)) উদাহরণস্বরূপ 20 টি

2 0 1 0 0 0 ...

কারণ এর প্রধান গুণনীয়করণ 2 * 2 * 5

যেহেতু মূল ফ্যাক্টরিকরণটি অনন্য, প্রতিটি সংখ্যা একটি ভেক্টরের সাথে মিলে যায়।

আমরা ভেক্টরগুলিকে জোড় করে তাদের এন্ট্রি যুক্ত করে যুক্ত করতে পারি। এটি তাদের সংখ্যার সাথে সংখ্যাবৃদ্ধির সমান। আমরা স্কেলার গুণকও করতে পারি, যা সম্পর্কিত সংখ্যাকে পাওয়ার হিসাবে বাড়ানোর অনুরূপ।

সমস্যাটি হ'ল এই স্থানটি আসলে কোনও ভেক্টর স্পেস নয় কারণ কোনও বিপরীত নেই। যদি আমরা এগিয়ে যাই এবং উল্টোগুলি যুক্ত করি এবং ভেক্টর স্পেসটি বন্ধ করি আমাদের কাছে এখন প্রতিটি ধনাত্মক যুক্তিযুক্ত সংখ্যা ভেক্টর হিসাবে প্রকাশ করার উপায় রয়েছে। যদি আমরা এই সত্যটি রাখি যে ভেক্টর সংযোজন গুণকে উপস্থাপন করে। তারপরে কোনও প্রাকৃতিক সংখ্যার বিপরীতটি হ'ল তার পারস্পরিক।

উদাহরণস্বরূপ 20 নম্বর ভেক্টর ছিল

2 0 1 0 0 0 ...

সুতরাং ভগ্নাংশ 1/20 এর বিপরীত

-2 0 -1 0 0 0 ...

আমরা যদি 14/15 এর মতো ভগ্নাংশের সাথে যুক্ত ভেক্টরটি সন্ধান করতে চাই তবে আমরা 14 খুঁজে পেতে পারি

1 0 0 1 0 0 ...

এবং 1/15

0 -1 -1 0 0 0 ...

এবং ভেক্টর সংযোজন সম্পাদন করে এগুলি গুণ করুন

1 -1 -1 1 0 0 ...

এখন যেহেতু আমাদের একটি ভেক্টর স্পেস রয়েছে সেটিকে আমরা অভ্যন্তরীণ পণ্য দিয়ে একটি অভ্যন্তরীণ পণ্য স্থান তৈরি করতে এটি সংশোধন করতে পারি। এটি করার জন্য আমরা অভ্যন্তরীণ পণ্যটি চুরি করি যা ভেক্টর স্পেসগুলি শ্রেণিবদ্ধভাবে দেওয়া হয়। দুটি ভেক্টরের অভ্যন্তরীণ পণ্য তাদের পদগুলির জোড়ওয়ালা গুণকের যোগফল হিসাবে সংজ্ঞায়িত হয়। উদাহরণস্বরূপ 20 · 14/15 নিম্নলিখিত হিসাবে গণনা করা হবে

20    =  2  0  1  0  0  0 ...
14/15 =  1 -1 -1  1  0  0 ...
         2  0 -1  0  0  0 ...  -> 1

অন্য উদাহরণ হিসাবে পণ্য 2/19 · 4/19

2/19 = 1 0 0 0 0 0 0 -1 0 0 0 ...
4/19 = 2 0 0 0 0 0 0 -1 0 0 0 ...
       2 0 0 0 0 0 0  1 0 0 0 ... -> 3

আপনার টাস্কটি এমন একটি প্রোগ্রাম বাস্তবায়ন করা যা এই ডট পণ্যটি সম্পাদন করে। এটি দুটি জোড় ধনাত্মক সংখ্যার নেওয়া উচিত (জোড় সংখ্যা এবং ডিনোমিনেটর) অথবা একটি যুক্তিযুক্ত ধরণের (ভাসমানগুলির অনুমতি নেই, কারণ তারা যথাযথতা এবং বিভাজনে সমস্যা সৃষ্টি করে) এবং দুটিটির বিন্দু পণ্যটির প্রতিনিধিত্ব করে একটি পূর্ণসংখ্যা আউটপুট করা উচিত ইনপুট।

এটি তাই কম বাইট ভাল হওয়ার সাথে বাইটে উত্তরগুলি দেওয়া হবে।

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

4 · 4 = 4
8 · 8 = 9
10 · 10 = 2
12 · 12 = 5
4 · 1/4 = -4
20 · 14/15 = 1
2/19 · 4/19 = 3

একটি ভেক্টরের একটি মাত্রা নেই, একটি ভেক্টর স্পেস করে।
জোনাথন ফ্রেচ

5
@ জোনাথনফ্রেচ আমি মনে করি এটি কিছুটা পেডেন্টিক তবে আমি পরিবর্তনটি করেছি।
গম উইজার্ড

"প্রাকৃতিক সংখ্যা" সাধারণত 0 থাকে যা আপনার সিস্টেমে প্রতিনিধিত্ব করে না। এবং এগুলি ভেক্টর নয়। একটি ভেক্টর স্পেস ক্ষেত্রের ওপরে এবং এটি একটি রিংয়ের ওপরে যা এটি একটি মডিউল তৈরি করবে। এবং এটি পূর্ণসংখ্যার থেকে পৃথক স্থান নয়, এটি ভিন্ন প্রতিনিধিত্বের একই স্থান।
সংগৃহীত

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

2
অপর একটি পরিভাষা নিট-পিক: ভেক্টর স্পেসগুলি সাধারণত কোনও ক্ষেত্র থেকে স্কেলারের গুণক হিসাবে পুনরূদ্ধার করা হয়, সুতরাং কেবলমাত্র পূর্ণসংখ্যা ব্যবহার করা যথেষ্ট নয়। এর কারণ আমরা চাই যে সমান্তরাল ভেক্টরগুলি একে অপরের গুণিতক হতে পারে, কেবল কিছু সাধারণের মিল নেই। উদাহরণস্বরূপ, space 4 $ এবং $ 8 this এই স্থানের সমান্তরাল "ভেক্টর" (এগুলি উভয়ই ফর্মের (a, 0, 0, ...)) তবে কোনওটি স্কেলার একাধিক (অর্থাত্ একটি পূর্ণসংখ্যার শক্তি) নয় অন্যান্য। আপনি ব্যবহার করতে পারেন এমন আরও অনেক শর্তাদি নেই, তবে এটি সাধারণভাবে জানা থাকবে। "পূর্ণসংখ্যার ওপরে ফ্রি মডিউল" আমার পক্ষে সবচেয়ে ভাল is
আর্থার

উত্তর:


4

এমএটিএল , 12 বাইট

YF2:&Y)dwd*s

ইনপুট একটি অ্যারে হয় [num1 den1 num2 den2]

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

ব্যাখ্যা

উদাহরণ ইনপুট বিবেচনা করুন [20 1 14 15]

YF      % Implicit input: array of 4 numbers. Exponents of prime factorization.
        % Gives a matrix, where each row corresponds to one of the numbers in
        % the input array. Each row may contain zeros for non-present factors
        % STACK: [2 0 1 0
                  0 0 0 0
                  1 0 0 1
                  0 1 1 0]
2:&Y)   % Push a submatrix with the first two rows, then a submatrix with the
        % other two rows
        % STACK: [2 0 1 0
                  0 0 0 0],
                 [1 0 0 1
                  0 1 1 0]
d       % Consecutive difference(s) along each column
        % STACK: [2 0 1 0
                  0 0 0 0],
                 [-1 1 -1 1]
wd      % Swap, and do the same for the other submatrix
        % STACK: [-1 1 -1 1]
                 [-2 0 -1 0]
*       % Element-wise product
        % STACK: [2 0 -1 0]
s       % Sum. Implicit display
        % STACK: 1

4

সি (জিসিসি) , 99 + 32 = 131 বাইট

  • সংকলক পতাকা ব্যবহার করে 32 বাইট প্রয়োজন -D=F(v,V,e)for(;v%p<1;V+=e)v/=p;,।
T,p,A,C;f(a,b,c,d){T=0;for(p=2;a+b+c+d>4;p++){A=C=0;F(a,A,1)F(b,A,~0)F(c,C,1)F(d,C,~0)T+=A*C;}a=T;}

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


আমি মনে করি যে অতিরিক্ত পতাকা -D=F(v,V,e)for(;v%p<1;V+=e)v/=p;(32 বাইট) ব্যবহার করা হয়েছে (তাই 99 + 32 = 131) স্পষ্টভাবে উল্লেখ করা ভাল better অন্যথায় কোডটি একা কিছু বোঝায় না।
বুদ্বুদ


3

পাইথন 2 , 110 বাইট

l=input()
p=t=2
while~-max(l):r=i=0;exec"while l[i]%p<1:l[i]/=p;r+=1j**i\ni+=1\n"*4;t+=r*r;p+=1
print t.imag/2

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

ইনপুট লাগে [num1, num2, den1, den2]। দুটি যৌক্তিকের rজন্য প্রাইমের pজন্য এন্ট্রিগুলি সঞ্চয় করতে এবং সামগ্রিক যোগফলের মধ্যে (r*r).imag/2তাদের পণ্যটি বের করতে একটি জটিল সংখ্যা ব্যবহার করে । জন্য যুক্ত করা হচ্ছেr.real*r.imagt1j**ii=0,1,2,3চারটি ইনপুট সংখ্যার জন্য আসল বা কাল্পনিক অংশকে বাড়ানো বা হ্রাস করার প্রতিটি সংমিশ্রণের ।

বুবলার প্রাথমিক মানগুলির সংমিশ্রণে 2 টি বাইট সংরক্ষণ করেছেন p=t=2


1
p=t=2পরিবর্তে p=2;t=0যেহেতু t.realযাহাই হউক না কেন উপেক্ষা করা হয় ( Tio )।
বুদ্বুদ

@ বুবলার ভাল লাগছে!
xnor


1

জাভাস্ক্রিপ্ট (নোড.জেএস) , 104 ... 100 94 বাইট

F=(A,i=2)=>A.some(x=>x>1)&&([a,b,c,d]=A.map(G=(x,j)=>x%i?0:1+G(A[j]/=i,j)),a-b)*(c-d)+F(A,i+1)

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

[Num1, Den1, Num2, Den2] এর অ্যারে হিসাবে নম্বরগুলি পাস করুন।

নিখোঁজ ঠিক করার জন্য আরনাউল্ডকে ধন্যবাদ F=কোনও অতিরিক্ত বাইট ছাড়াই এবং আরও 2 বাইট কম কম ধন্যবাদ

ব্যাখ্যা এবং অবরুদ্ধ

function F(A, i = 2) {                 // Main function, recursing from i = 2
 if (A.some(function(x) {              // If not all numbers became 1:
  return x > 1;
 })) {
  var B = A.map(G = function(x, j) {   // A recursion to calculate the multiplicity
   if (x % i)
    return 0;
   else
    return 1 + G(A[j] /= i, j);        // ...and strip off all powers of i
  });
  return (B[0] - B[1]) * (B[2] - B[3]) // Product at i
   + F(A, i + 1);                      // Proceed to next factor. All composite factors 
 }                                     // will be skipped effectively
 else 
  return 0;                            // Implied in the short-circuit &&
}

1

জে , 19 বাইট

1#.*/@,:&([:-/_&q:)

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

ব্যাখ্যা:

একটি ডায়াডিক ক্রিয়া, যুক্তিগুলি বাম হাত এবং ডানদিকে উভয় দিকে থাকে on

         &(        ) - for both arguments (which are lists of 2 integers)
               _&q:  - decompose each number to a list of prime exponents
           [:-/      - and find the difference of these lists
       ,:            - laminate the resulting lists for both args (to have the same length)
   */@               - multiply them
1#.                  - add up 


1

Python 2, 133 127 bytes

a=input();s=0;p=2;P=lambda n,i=0:n%p and(n,i)or P(n/p,i+1)
while~-max(a):a,(w,x,y,z)=zip(*map(P,a));s+=(w-x)*(y-z);p+=1
print s

Try it online!

Stole the loop condition from xnor's submission.

Thanks for the advice by @mathmandan to change the function into a program (Yes, it indeed saved some bytes).

Obsolete, incorrect solution (124 bytes):

lambda w,x,y,z:sum((P(w,p)-P(x,p))*(P(y,p)-P(z,p))for p in[2]+range(3,w+x+y+z,2))
P=lambda n,p,i=1:n%p and i or P(n/p,p,i+1)

Isn't p going to test non-prime values like 9?
xnor

Oops, I'll fix it soon.
Bubbler

3
You can replace return with print, and you can also save the indentation spaces if you write as a program instead of a function.
mathmandan

@mathmandan Thanks for the info. Looks useful for my other Py2 submissions, not sure for Py3 though (it takes extra eval() unless the function input itself is a string).
Bubbler

1

Haskell, 153 bytes

(2%)
n%m|all(<2)m=0|(k,[a,b,c,d])<-unzip[(,)=<<div x.max 1.(n*)$until((>0).mod x.(n^))(+1)1-1|x<-m]=(a-b)*(c-d)+[i|i<-[n..],all((>0).rem i)[2..i-1]]!!1%k

Try it online! Example usage for 20 · 14/15: (2%) [20,1,14,15].

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.