অনন্য প্রাইমগুলির সম্মিলিত পণ্য


21

সমস্যার বিবরণ

অনন্য, একটানা প্রাইমগুলির একটি সেট দেওয়া (অগত্যা 2 টি অন্তর্ভুক্ত নয়), এই প্রাইমগুলির প্রথম শক্তিগুলির সমস্ত সংমিশ্রণের পণ্যগুলি উত্পন্ন করুন - উদাহরণস্বরূপ, কোনও পুনরাবৃত্তি করা হয়নি - এবং এছাড়াও 1. উদাহরণস্বরূপ, সেটটি {2, 3, 5 দেওয়া হয়েছে, 7}, আপনি উত্পাদন করেন {1, 2, 3, 5, 6, 7, 10, 14, 15, 21, 30, 35, 42, 70, 105, 210} কারণ:

  1  =  1
  2  =  2
  3  =  3
  5  =  5
  6  =  2 x 3
  7  =  7
 10  =  2 x 5
 14  =  2 x 7
 15  =  3 x 5
 21  =  3 x 7
 30  =  2 x 3 x 5
 35  =  5 x 7
 42  =  2 x 3 x 7
 70  =  2 x 5 x 7
105  =  3 x 5 x 7
210  =  2 x 3 x 5 x 7

মনে রাখবেন যে আপনার ইনপুট সেটটির কার্ডিনালটি যদি কে হয় তবে এটি আপনাকে আউটপুট সেটে 2 ^ কে সদস্য দেবে।

বিধি / শর্তাবলী

  1. আপনি যে কোনও ভাষা ব্যবহার করতে পারেন। উত্স কোডের ক্ষুদ্রতম অক্ষর গণনার জন্য লক্ষ্য।
  2. আপনার সমাধানটি একটি সম্পূর্ণ প্রোগ্রাম বা একটি সম্পূর্ণ ফাংশন হতে হবে। ফাংশনটি বেনামে থাকতে পারে (যদি আপনার ভাষা বেনাম ফাংশন সমর্থন করে)।
  3. আপনার সমাধানটি কমপক্ষে 2 ^ 31 পর্যন্ত পণ্যগুলিকে সমর্থন করতে সক্ষম হওয়া উচিত। আপনি যদি এমন সংখ্যাগুলি পাস করেন যার পণ্য প্রতিনিধিত্ব করতে খুব দুর্দান্ত। তবে দয়া করে আপনার গণনার সীমাটি লিখুন।
  4. আপনি একটি তালিকা বা একটি সেট গ্রহণ করতে পারেন এবং একটি তালিকা বা একটি সেট উত্পাদন করতে পারেন। আপনি ধরে নিতে পারেন ইনপুটটি বাছাই করা হয়েছে তবে আপনি বাছাই করা আউটপুট উত্পাদন করার প্রয়োজন নেই।

পটভূমি

কখন বা কেন এটি দরকারী? স্কোয়ার ফর্ম ফ্যাক্টরাইজেশন হিসাবে পরিচিত ইন্টিজার ফ্যাক্টরিং অ্যালগরিদমকে সমান্তরালভাবে রেস টু মাল্টিপ্লায়ার্সের একটি টেবিল তৈরি করার ক্ষেত্রে এটি খুব দরকারী place। সেখানে, আপনি চেষ্টা করেছেন এমন প্রতিটি বিজোড় গুণক হার্ড সেমিপ্রাইমগুলিতে অ্যালগরিদম ব্যর্থ হওয়ার সম্ভাবনা হ্রাস করে (কোনও উপাদান খুঁজে পেতে) প্রায় অর্ধগুণ কম হয় m সুতরাং 3 5, 5, 7, 11 prime উত্পাদিত প্রাইমের সেট সহ, যা সমান্তরালভাবে ঘোড়দৌড়ের জন্য 16 টি ট্রায়াল মাল্টিপ্লায়ার্সের একটি সেট তৈরি করে, অ্যালগরিদম হার্ড সেমিপ্রাইমগুলিতে প্রায় 2 approximately ^16 সময় ব্যর্থ হয়। প্রাইম তালিকায় 13 যোগ করা 32 টি ট্রায়াল মাল্টিপ্লায়ার্সের একটি সেট তৈরি করে, ব্যর্থতার সম্ভাবনা প্রায় 2 – ^32 এ হ্রাস করে, কোনও অতিরিক্ত কম্পিউটেশনাল ব্যয় না করে ফলাফলের ক্ষেত্রে এক বিরাট উন্নতি দেয় (কারণ সমানতালে দ্বিগুণ বহু গুণক দৌড় দিয়েও, গড় এটি এখনও একই পদক্ষেপের মোট সংখ্যায় উত্তর খুঁজে পায়)।

উত্তর:


18

খাঁটি বাশ, 32 বাইট

eval echo \$[{1,${1// /\}*{1,}}]

কমান্ড-লাইন আর্গ হিসাবে পাস ইনপুট তালিকা (একক স্থান পৃথক পৃথক) পড়ে।

তিনটি পৃথক শেল বিস্তৃতি ব্যবহৃত হয়:

  1. ${1// /\}*{1,}একটি প্যারামিটার সম্প্রসারণ যা দেওয়ার 2 3 5 7সাথে স্থানগুলি প্রতিস্থাপন করে । এবং দিতে যথাক্রমে শুরু এবং শেষ যোগ করা হয় । ব্যাকস্ল্যাশ-পলান এই পর্যায়ে গাণিতিক সম্প্রসারণ করতে প্রচেষ্টা প্রতিরোধ করা হয়।}*{1,2}*{1,3}*{1,5}*{1,7\$[{1,}]\$[{1,2}*{1,3}*{1,5}*{1,7}]\$[
  2. \$[{1,2}*{1,3}*{1,5}*{1,7}]একটি ধনুর্বন্ধনী প্রসার । যেহেতু ব্রেস প্রসারণ সাধারণত প্যারামিটার বিস্তারের আগে ঘটেeval তাই আমাদের প্যারামিটারের প্রসারণটি প্রথমে বাধ্য করতে ব্যবহার করতে হবে। ধনুর্বন্ধনী প্রসারিত ফলাফল $[1*1*1*1] $[1*1*1*7] $[1*1*5*1] ... $[2*3*5*7]
  3. $[1*1*1*1] $[1*1*1*7] $[1*1*5*1] ... $[2*3*5*7]পাটিগণিতের বিস্তারের একটি তালিকা যা পরে আমাদের প্রয়োজনীয় সংখ্যার তালিকা দেওয়ার জন্য মূল্যায়ন করা হয়।

আউটপুট:

$ ./comboprime.sh "2 3 5 7"
1 7 5 35 3 21 15 105 2 14 10 70 6 42 30 210
$

3
মাইন্ড ... প্রস্ফুটিত ... বাহ!
টড লেহম্যান

ডাব্লুটিএফ ... আমি পেয়েছি1 0
ব্যবহারকারীর নাম

@ username.ak আপনার ইনপুটটি কী? আপনি এটি কীভাবে ইনপুট করছেন (কমান্ড-লাইন আরগস?)। আপনি বাশের কোন সংস্করণটি চালাচ্ছেন? bash --version
ডিজিটাল ট্রমা

12

সিজেম, 13 বাইট

1aq~{1$f*+}/p

[2 3 5 7]STDIN থেকে একটি অ্যারে (যেমন, ) পড়ে Read এটি অনলাইনে চেষ্টা করুন।

একটি বেনামে ফাংশনটিতে একই বাইট গণনা থাকবে:

{1a\{1$f*+}/}

উদাহরণ রান

$ cjam <(echo '1aq~{1$f*+}/p') <<< '[]'
[1]
$ cjam <(echo '1aq~{1$f*+}/p') <<< '[2 3 5 7]'
[1 2 3 6 5 10 15 30 7 14 21 42 35 70 105 210]

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

1a               " Push R := [1].              ";
  q~             " Read an array A from STDIN. ";
    {     }/     " For each a ∊ A:             ";
     1$f*+       "     R += { ra : r ∊ R }     ";
            p    " Print.                      ";

4
বাহ, এটি সমস্ত সাবসেটের মাধ্যমে পুনরাবৃত্তি করার একটি চতুর উপায়।
মার্টিন এন্ডার

9

হাস্কেল, 22

সমাধানটি একটি বেনামে কাজ:

map product.mapM(:[1])

উদাহরণস্বরূপ ব্যবহার:

*Main> map product.mapM(:[1]) $ [2,3,5]
[30,6,10,2,15,3,5,1]

ব্যাখ্যা:
(:[1]) একটি ফাংশন যা প্রদত্ত xতালিকার কোনও নম্বর দেয় [x,1]
mapM(:[1])একটি ফাংশন যা সংখ্যার একটি তালিকা (:[1])দেয় তাদের উপরে ফাংশন ম্যাপ করে এবং প্রতিটি তালিকা থেকে একটি উপাদান চয়ন করার প্রতিটি সম্ভাব্য উপায় প্রদান করে। উদাহরণস্বরূপ, mapM(:[1]) $ [3,4]প্রথমটি পেতে ফাংশনটি মানচিত্র করুন [[3,1] , [4,1]]। তারপরে সম্ভাব্য পছন্দগুলি হ'ল [3,4](উভয়ের প্রথম সংখ্যা নির্বাচন করা) [3,1] [1,4]এবং [1,1]তাই এটি ফিরে আসে [[3,4],[3,1],[1,4],[1,1]]

তারপরে map productসমস্ত পছন্দের উপর মানচিত্র তৈরি করে এবং তাদের পণ্যগুলি ফেরত দেয় যা হ'ল আউটপুট।

এই ফাংশনটি এর ধরণের বহুবচিক অর্থ এই যে এটি সমস্ত ধরণের সংখ্যায় কাজ করতে পারে। আপনি এটির একটি তালিকা ইনপুট করতে পারেন Intএবং ফলাফলটি একটি তালিকা হতে Intপারে তবে ধরণের তালিকায়ও প্রয়োগ করা যেতে পারেIntegerএবং একটি তালিকা ফিরে Integer। এর অর্থ হ'ল ওভারফ্লো আচরণটি এই ফাংশন দ্বারা নয় তবে ইনপুট প্রকারের দ্বারা নির্দিষ্ট করা হয়েছে (ইয়ে হাস্কেলের এক্সপ্রেটিভ টাইপ সিস্টেম :))


নিস! সংখ্যা আকারের কোন সীমা আছে?
টড লেহম্যান

1
পছন্দ করুন ডিফল্ট সংখ্যার প্রকারটি Integerযা সীমাহীন পূর্ণসংখ্যার প্রকার। এছাড়াও রয়েছে Intএকটি 32-বিট পূর্ণসংখ্যা, তবে এটি বেশিরভাগ ক্ষেত্রে কেবল একটি উত্তরাধিকার বিষয়।
জন ডিভোরাক

@ জনডভোরাক অনুশীলনে হ্যাঁ তবে আমি টাইপ সিস্টেমটিকে খুব বেশি ভালবাসি এটি উল্লেখ না করার জন্য :)। আরেকটি বিষয় লক্ষ্য করার বিষয়টি হ'ল এটি অনামিকার কারণ আপনি এটি কীভাবে ব্যবহার করবেন তা গুরুত্বপূর্ণ কারণ মনোমরফিজম সীমাবদ্ধতা কিছু ক্ষেত্রে প্রয়োগ হতে পারে।
গর্বিত হাস্কেলর

8

ম্যাথমেটিকা, 18 17 বাইট

1##&@@@Subsets@#&

এটি একটি বেনামে ফাংশন। এটিকে কল করুন

1##&@@@Subsets@#&[{2,3,5,7}]

এবং মার্টিন একটি সুন্দরভাবে সংক্ষিপ্ত উত্তর দিয়ে চলা!
টড লেহম্যান

@ টডলেহম্যান এখন আসুন জে জবাবের জন্য অপেক্ষা করুন যা এটি জবাব দেয়। ;)
মার্টিন এন্ডার

1
ম্যাথামেটিকাকে যদি ক্লোজড সোর্স না করা হত তবে কেউ কেউ একটি গল্ফ সংস্করণ লিখতে পারে। ×@@@𝒫@#অপরাজেয় হওয়া উচিত।
ডেনিস

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

2
@ মার্টিনব্যাটনার আপনাকে অপেক্ষা করার জন্য ক্ষমা চেয়েছেন: (*/@#~2#:@i.@^#)জেতে 16 টি অক্ষর;)
অ্যালগরিদমশর্ক

4

আপডেট: সি (ফাংশন চ), 92

এমনকি একটি ফাংশন হিসাবে, এটি এখনও এখানে দীর্ঘতম প্রবেশ is এটি প্রথমবার আমি অজানা দৈর্ঘ্যের একটি অ্যারে সি তে একটি ফাংশন আর্গুমেন্ট হিসাবে পেরিয়েছি এবং দৃশ্যত কোনও সি ফাংশনের পক্ষে এটির পাস হওয়া অ্যারের দৈর্ঘ্যটি জানার উপায় নেই, কারণ তর্কটি বিন্দু হিসাবে পাস হয়েছে ( ব্যবহৃত বাক্য নির্বিশেষে)। সুতরাং দৈর্ঘ্য নির্দেশ করার জন্য একটি দ্বিতীয় যুক্তি প্রয়োজন।

আমি আউটপুটটি স্টডআউটে রেখেছি, কারণ একটি পূর্ণসংখ্যা অ্যারে সেট আপ করা এবং এটি ফিরে আসা প্রায় অবশ্যই দীর্ঘ হবে।

টিপস জন্য ডেনিস ধন্যবাদ।

fনীচের পরীক্ষামূলক প্রোগ্রামগুলিতে ফাংশনটি (অপ্রয়োজনীয় সাদা স্থান বাদে 92 টি অক্ষর) দেখুন।

প্রিন্টফের মাধ্যমে আউটপুট

j;

f(int c,int*x){
  int p=1,i;
  for(i=c<<c;i--;p=i%c?p:!!printf("%d ",p))p*=(i/c>>i%c)&1?1:x[i%c];
}

main(int d,char**v){
  d--;
  int y[d];
  for(j=d;j--;)y[j]=atoi(v[j+1]);
  f(d,y);
}

অ্যারে পয়েন্টার মাধ্যমে আউটপুট

j,q[512];

f(int c,int*x,int*p){
    for(int i=-1;++i-(c<<c);p[i/c]*=(i/c>>i%c)&1?1:x[i%c])i%c||(p[i/c]=1);
}

main(int d,char**v){
  d--;
  int y[d];
  for(j=d;j--;)y[j]=atoi(v[j+1]);
  f(d,y,q);
  for(j=1<<d;j--;)printf("%d ",q[j]);
}

সি (প্রোগ্রাম), 108

অপ্রয়োজনীয় সাদা স্থান বাদে।

p=1,i;
main(int c,char**v){
  c-=1;
  for(i=c<<c;i--;i%c||(printf("%d ",p),p=1))(i/c>>i%c)&1||(p*=atoi(v[i%c+1]));
}

কমান্ডলাইন থেকে স্টপআউট আউটপুট। সি এখানে জিততে যাচ্ছে না, তবে সম্ভবত আমি আগামীকাল কোনও কার্যক্রমে রূপান্তরিত করার চেষ্টা করব।

মূলত আমরা সমস্ত 1<<cপ্রাইমগুলির সংমিশ্রণগুলির মাধ্যমে পুনরাবৃত্তি করি , যার সাথে প্রতিটি বিট i/cপণ্যটিতে কোনও নির্দিষ্ট প্রধানের উপস্থিতি বা অনুপস্থিতির সাথে যুক্ত থাকে। "অভ্যন্তরীণ লুপ" i%cপ্রাইমগুলির মধ্য দিয়ে চলে, i/c.যখন i%c0 এর মান অনুযায়ী গুণ করে , পণ্যটি আউটপুট হয়, তারপরে পরবর্তী "বহিরাগত" পুনরাবৃত্তির জন্য 1 তে সেট করে।

কৌতূহলীভাবে, printf("%d ",p,p=1)কাজ করে না (এটি সর্বদা একটি প্রিন্ট করে)) আমি প্রথম যখন প্রথমটিতে এটি ব্যবহার করি না তখন কোনও মান একটিতে ব্যবহৃত হয় printfএবং পরে একই বন্ধনীতে নির্ধারিত হয়। এই ক্ষেত্রে এটি সম্ভব যে দ্বিতীয় কমাটি আর্গুমেন্ট বিভাজক হিসাবে নয়, বরং অপারেটর হিসাবে বিবেচিত হচ্ছে।

ব্যবহার

$ ./a 2 3 5 7
1 2 3 6 5 10 15 30 7 14 21 42 35 70 105 210

সি আর্গুমেন্টগুলিতে মূল্যায়ন করা হয় সেই আদেশটিকে কঠোরভাবে সংজ্ঞায়িত করে না In
COTO

আইএসও / আইসিসি 9899 এর ধারা 6.5.2.2 থেকে : টিসি 3 : ফাংশন ডিজাইনার, প্রকৃত যুক্তিগুলি এবং আসল আর্গুমেন্টগুলির মধ্যে সুব এক্সপ্রেসনের মূল্যায়নের ক্রমটি অনির্দিষ্ট করা আছে [।] সুতরাং, এটি সংকলকটির উপর নির্ভর করে যে কোনও ক্রিয়াকলাপটি আদেশ করবে যুক্তি মূল্যায়ন করা হয়। সঙ্গে -Wsequence-pointবা -Wall, জিসিসি অভিযোগ হবে।
ডেনিস

১. আপনি যদি ইউবির কিছু মনে না করেন তবে আপনি এটি পরিবর্তন c-=1করতে c--বা এমনকি ব্যবহার করতে i=--c<<cপারেন (এটি জিসিসির সাথে কাজ করে বলে মনে হচ্ছে)। 2. দুটি ||ব্যবহারই টেরিনারি অপারেটরগুলির সাথে প্রতিস্থাপিত হতে পারে: p=i%c?p:!!printf("%d ",p)এবংp*=(i/c>>i%c)&1?1:atoi(v[i%c+1])
ডেনিস

@ ডেনিস টিপস জন্য ধন্যবাদ! আমি বিছানার ঠিক আগে পোস্ট করেছি তাই আমি প্রোগ্রামটি চলমান পেয়েছি। c-=1এই ধরনের বেসিক গল্ফিংটি আমার এটি এড়ানো উচিত ছিল না, তবে এটি একটি দ্রুত বাগ ফিক্স ছিল কারণ আমি ভুলে গিয়েছিলাম যে i=..c<<cআরগভিতে একটি অতিরিক্ত স্ট্রিং রয়েছে (প্রোগ্রামের নাম G ) জিসিসি / সাইগউইনে কাজ করে, তবে আমি আমার আসলটি রেখে এসেছি প্রোগ্রাম হিসাবে এটি এবং একটি ফাংশন সরানো। সুতরাং আমি সবে শিখেছি যে sizeofফাংশন আর্গুমেন্ট হিসাবে পাস অ্যারে কাজ করে না। আমি তৃতীয় অপারেটরদের জন্য আপনার পরামর্শগুলি ফাংশনে অন্তর্ভুক্ত করেছি। আমি আউটপুট স্টাডাউট আটকেছি কারণ আমি কোনও অ্যারে ফেরার কোনও সংক্ষিপ্ত উপায় দেখতে পাচ্ছি না।
স্তরের নদী সেন্ট

হ্যাঁ, অ্যারেগুলি পয়েন্টারগুলিতে ফাংশন আর্গুমেন্ট ক্ষয় হিসাবে পাস করেছে। - অ্যারেতে কোনও পয়েন্টারটি পাস করা অস্বাভাবিক কিছু নয় যা ফাংশন প্যারামিটার হিসাবে ফলাফলগুলি ধারণ করে। প্রশ্নটি বলেছে যে আপনি ধরে নিতে পারেন যে পণ্যগুলি 2 ^ 31 এর চেয়ে কম ছোট, তাই আপনি কেবল 512 আকারের অ্যারে পাস করতে পারেন
ডেনিস

3

হাস্কেল, 27 বাইট

এটি একটি বেনামি ফাংশন হিসাবে @ সুডোর সিজেএম উত্তরের হাস্কেল বাস্তবায়ন। এটি @ সম্প্রদায়ের হাস্কেলারের দুর্দান্ত হাস্কেল সমাধানটিকে হারাবে না, তবে আমি এটিকে যাইহোক এখানে ফেলে দেব drop

foldr((=<<)(++).map.(*))[1]

ব্যাখ্যা: foldr একটি বাইনারি ফাংশন, একটি মান এবং একটি তালিকা গ্রহণ করে। তারপর এটি ফাংশনের একটি অ্যাপ্লিকেশন দ্বারা তালিকার প্রতিটি কনস সেল, এবং মান দ্বারা তালিকার শেষে, ভালো প্রতিস্থাপন: foldr f v [a,b,c] == f a (f b (f c v))। আমাদের মানটি একটি এক-উপাদান তালিকা সহ 1বাইনারি ফাংশন f = (=<<)(++).map.(*)। এখন, fএকটি সংখ্যা নেয় n, একটি ফাংশন তৈরি করে (n*)যা দ্বারা গুণিত হয় n, এটি থেকে g = map(n*)এমন একটি ফাংশন তৈরি করে যা তালিকার সমস্ত উপাদানগুলিতে সেই ফাংশনটি প্রয়োগ করে এবং সেই ফাংশনটি ফিড করে (=<<)(++)। এখানে, সংক্ষিপ্তকরণ (++)ফাংশনটি রয়েছে, এবং (=<<)এটি monadic বাইন্ড , যা এই ক্ষেত্রে গ্রহণ করে (++)এবং g, এবং একটি ফাংশন দেয় যা একটি তালিকা গ্রহণ করে, প্রযোজ্যg এটির একটি অনুলিপিতে এবং দুটিকে সম্মতি জানায়।

সংক্ষেপে: [1]এবং nইনপুট তালিকার প্রতিটি সংখ্যার জন্য শুরু করুন, বর্তমান তালিকার একটি অনুলিপি নিন, সমস্ত কিছু দিয়ে গুণিত nকরুন এবং এটি বর্তমান তালিকায় যুক্ত করুন।


3

পাইথন: 55 টি অক্ষর

f=lambda l:l and[x*l[0]for x in f(l[1:])]+f(l[1:])or[1]

ঘুরেফিরে প্রতিটি সংখ্যা অন্তর্ভুক্ত বা বাদ দিয়ে বাছাই করে পুনরাবৃত্তভাবে পণ্যগুলি উত্পন্ন করে।


পুনরাবৃত্তির সমাধান! শান্ত!
টড লেহম্যান

আমি মনে করি আপনি andঅন্যদিকে রাশিটি লিখলে আপনি স্থানটি ফেলে দিতে পারবেন?
mathmandan

@ মঠমন্ডান ইয়ুপ, এটি কার্যকর, ধন্যবাদ
xnor

3

প্যারি / জিপি , 26 বাইট

v->divisors(factorback(v))

দীর্ঘ সংস্করণ অন্তর্ভুক্ত

v->divisors(prod(i=1,#v,v[i]))

(30 বাইট) এবং

v->divisors(fold((x,y)->x*y,v))

(31 বাইট)

নোট করুন যে ইনপুটটি যদি সেটের পরিবর্তে ফ্যাক্টেরাইজেশন ম্যাট্রিক্স হয় তবে 18 বাইট divisorsএকা ব্যবহার করে সংরক্ষণ করা যেতে পারে । তবে একটি সেটকে একটি ফ্যাক্টরীকরণ ম্যাট্রিক্সে রূপান্তর করতে 18 বাইটের বেশি লাগবে। (আমি এটি 39 বাইটে সরাসরি v->concat(Mat(v~),Mat(vectorv(#v,i,1)))বা 24 বাইটে গুণ এবং পুনরায় ফ্যাক্টরিংয়ের মাধ্যমে v->factor(factorback(v))করতে পারি, কেউ কি আরও ভাল করতে পারে?)


2

সেজ - 36 34

মূলতঃ, আমি যদি এটি সঠিকভাবে বুঝতে পারি তবে মার্টিন বাটনার এর সমাধান হিসাবে একই । আমি যেমন এটি একটি মন্তব্যে উল্লেখ করেছি, আমি সম্ভবত এটি উত্তর হিসাবে পোস্ট করতে পারি।

lambda A:map(prod,Combinations(A))

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

(lambda A:map(prod,Combinations(A)))([2,3,5,7])

1
আপনি একটি
বেনাম

2

জে (20)

এটি আমার প্রত্যাশা বা প্রত্যাশার চেয়ে দীর্ঘতর হয়ে উঠল ti তবুও: হাস্কেলের চেয়ে ছোট!

*/@:^"1#:@i.@(2&^)@#

ব্যবহার:

    f=:*/@:^"1#:@i.@(2&^)@#
    f 2 3 5 7
1 7 5 35 3 21 15 105 2 14 10 70 6 42 30 210

এটি কেবল প্রাইম নয়, কোনও সংখ্যার সেটের জন্য কাজ করে। এছাড়াও, প্রাইমগুলি সীমাহীন আকারের হতে পারে, যতক্ষণ না অ্যারে পোস্টফিক্স থাকে x:2 3 5 7x


*/@#~2#:@i.@^#14 বাইট জন্য বিকল্প।
মাইল


1

আর, 56 বাইট

r=1;for(i in 1:length(s))r=c(r,apply(combn(s,i),2,prod))

আমি এখানে বিবেচনা করছি যে গুলি সেট (এবং একটি তালিকা)। আমি নিশ্চিত যে এটি আরও খাটো করা যায়। আমি দেখব.


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