এন এর সমস্ত গুণক পার্টিশন তালিকাভুক্ত করুন


28

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

N এর গুণক পার্টিশন হল পূর্ণসংখ্যার একটি সেট, একের চেয়ে বড় সমস্ত, যেমন তাদের পণ্য এন হয় । উদাহরণস্বরূপ, 20 এর নীচে আলাদা আলাদা গুণক পার্টিশন রয়েছে:

2 * 2 * 5
2 * 10
4 * 5
20

অর্ডার কোনও বিষয় নয়, 2 * 2 * 5একই পার্টিশনটিও 2 * 5 * 2


উদাহরণ:

1 -> {}
2 -> {2}
4 -> {2, 2}, {4}
20 -> {2, 2, 5}, {2, 10}, {4, 5}, {20}
84 -> {2, 2, 3, 7}, {2, 2, 21}, {2, 14, 3}, {2, 6, 7}, {2, 42}, {4, 3, 7}, {28, 3}, {4, 21}, {6, 14}, {12, 7}, {84}


উত্তর:


6

ব্র্যাচল্যাগ , 16 বাইট

>~l:{1<}a.*?,.=o

এটি একটি ফাংশন (সম্পূর্ণ প্রোগ্রাম নয়) যা ইনপুট হিসাবে ধনাত্মক সংখ্যা নেয় এবং এর সমস্ত গুণক পার্টিশন উত্পন্ন করে। (আমি এই সমাধানে কোনও মূল ফ্যাক্টরীকরণের বিল্টিনগুলি ব্যবহার করা এড়িয়ে গেছি, বেশিরভাগ কারণেই তারা নিশ্চিত ছিল যে তারা সহায়তা করবে না; আমিও হয়ত আরও কিছুটা বিল্টিন-ভারী সমাধান চেষ্টা করতে পারি))

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

এই প্রোগ্রামটি আমাকে সত্যিই হতাশ করেছে, কারণ এর বেশিরভাগ অংশ ব্র্যাকল্যাগ দোভাষী এবং এর নির্দিষ্টকরণের ঘাটতিগুলি সম্পর্কে সমস্যা সমাধান করে বরং সমস্যা সমাধানের পরিবর্তে কাজ করে; কিন্তু দোভাষী যাকে বলে। (এমনকি এই জাতীয় প্রোগ্রামের সাথেও, দোভাষী তার পক্ষে যৌক্তিকভাবে হওয়া উচিতের তুলনায় অনেক বেশি মেমরি ব্যবহার করে এবং মেমরির অবসন্নতার কারণে ক্র্যাশ হয় তবে ভাগ্যক্রমে ছোট সমস্যাগুলির ফলে এটি প্রথমে পছন্দসই আউটপুট উত্পাদন করতে পারে)) একটি অনুমানমূলক "ব্র্যাচল্যাগের নিখুঁত সংস্করণ" তে আপনি কেবল লিখতে পারেন ~*.o.:{>1}a,, যা 4 বাইট ছোট হবে, তবে দোভাষীকে কিছুটা সাহায্য করার জন্য আমার অতিরিক্ত বাধা যুক্ত করতে হবে to (আমি ব্র্যাচল্যাগ সত্যিই খুব বেশি পছন্দ করি না, এবং প্রোলোগের সাথে লেগে থাকি, তবে প্রোগ্রামটি কাজ করতে এটির অনুরূপ ইঙ্গিতগুলির প্রয়োজন এবং তারা লেখার জন্য আরও দীর্ঘায়িত So সুতরাং ব্র্যাচল্যাগ এটি হয়))

ব্যাখ্যা:

যথারীতি, একটি ব্র্যাচল্যাগ প্রোগ্রাম হ'ল বাধার একটি সেট; ডিফল্টরূপে, প্রথম বাধ্যতা constrains ইনপুট একটি অজানা বিরুদ্ধে (যা আমি ডাকবো একটি ), দ্বিতীয় বাধ্যতা constrains একটি একটি দ্বিতীয় অজানা বিরুদ্ধে বি , ইত্যাদি যতক্ষণ না আমরা আউটপুট থাকে। কিছু অক্ষর, যেমন {}, এই সাধারণ প্রবাহকে পরিবর্তন করতে পারে, তাই আমি নেস্টেড পূর্বাভাসে অজানা প্রতিনিধিত্ব করতে অক্ষরের একটি আলাদা সেট (যেমন এক্স / ওয়াই ) ব্যবহার করি ।

>       A is smaller than the input
~l      B has length A
  1<    X is 1, Y is larger
:{1<}a  For each element X of B, it corresponds to an element Y of C
.       C, the output, and D are all identical
*       E is the product of D's elements
?       E, the input, and F are all identical
,       There's no constraint between F and G
.       G, the output, and H are all identical
=       H and I are identical, and need to be evaluated early
o       The output can be produced by sorting I

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

  • A হ'ল B এবং আউটপুটের দৈর্ঘ্য এবং ইনপুট থেকে ছোট is
  • বি সমস্ত 1 এস সমন্বয়ে গঠিত এবং বিশেষভাবে কার্যকর নয় (এটি প্রোগ্রামের অংশ হিসাবে কেবলমাত্র বিদ্যমান ব্র্যাচল্যাগ ইন্টারপ্রেটারে রয়েছে, :{1<}aতার বাম যুক্তিটির একটি সীমাবদ্ধ দৈর্ঘ্যের প্রয়োজন হয়, অন্যথায় অনুবাদক অসীম লুপে যান)।
  • আউটপুট সম্পূর্ণ 1 টির বেশি সংখ্যার (অর্থাৎ বি এর সাথে সম্পর্কিত উপাদানগুলির চেয়ে বেশি ) থাকে।
  • আউটপুট উপাদানের পণ্য ইনপুট সমান।
  • আউটপুটটি এটি বাছাই করে অপরিবর্তিত হয় (অর্থাৎ সাজানো ক্রমে হয়)।

ঘটনাচক্রে, আমি স্পষ্টভাবে নির্দিষ্ট করেছিলাম না যে আউটপুটটির সমস্ত উপাদানগুলি পূর্ণসংখ্যা, এমন কিছু যা প্রয়োজন বলে মনে হচ্ছে; তবে, ব্র্যাচল্যাগের সীমাবদ্ধ সমাধানকারী অ-পূর্ণসংখ্যাগুলি পরিচালনা করতে পারে না, সুতরাং এটি সহজেই কেবলমাত্র পূর্ণসংখ্যার সাথে জড়িত সমাধানগুলি তৈরি করতে পারে।

স্পষ্টতই, "আউটপুটটির দৈর্ঘ্য ইনপুটের তুলনায় ছোট" যখনই আউটপুটটি ইনপুটটির একটি গুণক পার্টিশন হয় তখন সত্য হতে চলেছে (কারণ 2 x > x সমস্ত ননজেটিভ এক্স , অর্থাৎ ধনাত্মক 2 এক্স )। সুতরাং আমরা এই সীমাবদ্ধতা উপেক্ষা করতে পারি; ব্র্যাকল্যাগ দোভাষীকে প্রোগ্রামটি মূল্যায়নের জন্য একটি কার্যকরী কৌশল দেওয়ার জন্য এটি কেবল সেখানেই রয়েছে। অন্যান্য প্রতিবন্ধকতা (যে আউটপুটটি সাজানো হয়, তার পণ্যটি ইনপুট হয় এবং এর উপাদানগুলি 1 এর চেয়ে বড় হয়) হ'ল একটি গুণক পার্টিশনের সংজ্ঞা, এবং এই কারণে এই কার্যটি মূলত প্রশ্নের সরাসরি বাস্তবায়ন।


6

ব্র্যাচল্যাগ 1, 14 বাইট

:{$pp~c:*ao}fd

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

ব্র্যাচল্যাগ 2, 11 10 বাইট, ভাষা পোস্টডেটস চ্যালেঞ্জ

{ḋp~c×ᵐo}ᵘ

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

মালটিসেন এই প্রশ্নের উত্তর পাইথের 17 বাইটে দিয়েছিলেন, তাই আমি একটি 16-বাইট ব্র্যাচ্য্ল্যাগ সমাধান নিয়ে এসেছি যা ব্র্যাচ্ল্যাগ-এ প্রশ্নের স্পেসিফিকেশন অনুবাদ করে কাজ করেছিল। আমি যখন এটি করছি, ডেনিস একটি 15 বাইট জেলি সমাধান লিখেছিলেন। সুতরাং আমাকে 14 বাইটে যেতে হয়েছিল। এটি এমন একটি ফাংশন যা ইনপুটটিকে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং সমস্ত পার্টিশনের একটি তালিকা ফেরত দেয় (জেনারেটরের পরিবর্তে, আমার অন্যান্য সমাধান হিসাবে)।

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

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

প্রোগ্রামটিতে একটি জেনারেটর এবং তার চারপাশে একটি মোড়ক রয়েছে। প্রথমত, এখানে জেনারেটরের একটি ব্যাখ্যা:

$pp~c:*ao  ḋp~c×ᵐo
$p         ḋ        Prime factor decomposition of the input
  p         p       Generate all permutations
   ~c        ~c     Generate all inverse concatenations (i.e. partitions)
     :*a       ×ᵐ   Take the product of each list element in each partition
        o        o  Sort each partition

এটি প্রায় সমস্যাটি সমাধান করে, তবে আমরা প্রতিটি পার্টিশনের অনেকবার উত্পন্ন করি। সুতরাং সমাধানগুলি নকল করার জন্য আমাদের একটি মোড়কের দরকার:

:{…}fd
:{…}f     Convert generator to list
     d    Remove duplicate elements

{…}ᵘ      Convert generator to list of unique elements

কেন আপনার অস্তিত্বের উত্তর সম্পাদনা করবেন না?
ডাউনওয়েট

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

1
আপনি এটি জানেন কিনা তা আমি জানি না তবে আপনি টিআইওতে একটি পরিবর্তনশীল (অর্থাত্ বড় হাতের অক্ষর) হিসাবে আর্গুমেন্ট সেট করে আউটপুটটি পুনরুদ্ধার করতে পারেন। উদাহরণস্বরূপ
2'17 কে মারাত্মক করুন

5

গণিত, 61 বাইট

±1={{}}
±n_:=Union@@(Sort/@Append[n/#]/@±#&/@Most@Divisors@n)

একটি (পুনরাবৃত্ত হওয়া) আনরি অপারেটর সংজ্ঞায়িত করে ±যা পার্টিশনের তালিকার তালিকা দেয়।


গণিতের শেষে কি সেমিকোলনের দরকার নেই?
পাভেল

@ পাভেল নং, সেমিকোলন কেবল ইন্টারেক্টিভ নোটবুকের আউটপুটকে দমন করে। এটি দেখানোর জন্য ধন্যবাদ, বিটিডব্লিউ, আমি ঘটনাক্রমে শেষে একটি সেমিকোলন রেখেছি।
মার্টিন এেন্ডার

4

পাইথ - 17 বাইট

প্রাইম ফ্যাক্টরীকরণের সমস্ত অনুমতি নেয়, তার পরে প্রতিটি পার্টিশন দেয় এবং তারপরে সমস্ত পার্টিশন তৈরি করে, তারপরে কেবল পৃথক পার্টিশন ধরে রাখা যায়।

{mS-*Md1s./M.p+1P

টেস্ট স্যুট


4

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

f=lambda n,k=2,l=[]:n/k and(n%k<1)*f(n/k,k,l+[k])+f(n,k+1,l)or 1/n*[l]

বাছাই করা তালিকার একটি তালিকা আউটপুট দেয়। উদাহরণস্বরূপ f(20)হয় [[2, 2, 5], [2, 10], [4, 5], [20]]


পাইথনের অন্তর্নির্মিত পূর্ণসংখ্যার ধরণের কোনও সীমা না থাকায় ভাসমান বিন্দু গ্রহণযোগ্য সমাধান নয় কারণ অকার্যকরগুলি খুব বড় ইনপুটগুলির উত্তরটি ভেঙে দেবে।
orlp

@orlp ঠিক আছে, পাইথন 2 এ ফিরে আসুন।
xnor

টিএল; ডিআর আমি মনে করি যে 998 খুব বড় ইনপুট নয় ;-) আইএমও সত্যিকারের শীতল কোডের মতো, লাইটেন্সির মতো O(n)এবং পাইথন 2 প্রতিযোগীর সাথে তুলনা করা আরও O(n^4)স্টাইল হতে পারে - যখন চ (998) মেমরি ফুটিয়ে তুলতে পারে বা হার্ডওয়্যার রানের মধ্যেই মারা যেতে পারে অন্যান্য অ্যালগরিদমের সাথে প্রায় ৮০ দিনের সময়, এটি এখানে প্রায় কাছাকাছি রূপান্তরিত হয়। ফলাফলটি পেতে আমার মেশিনে 7 মিলি সেকেন্ড [[2, 499], [998]]। আইএমও সমস্যাটি হতে পারে যে জন্য পাইথন উপরে 3 কোড ... খুশি golfing :-) স্টপN > 998RecursionError: maximum recursion depth exceeded in comparison
Dilettant

@ ডিলিট্যান্ট O(n^4)আমার পাইথন 2 জমা দেওয়ার জন্য যথেষ্ট কিনা তা নিশ্চিত নন : ডি পরীক্ষার কেস 998 বিবেচনা করে, আমার কোডটি 9 বার চলবে এবং (n+r-1)! / r! / (n-1)!প্রতিবারের পরিমাণে টিপলস গণনা করবে , যেখানে r2 থেকে রৈখিকভাবে বৃদ্ধি পাচ্ছে, এবং এন হয় 9 - 2। তবে ওহে, কমপক্ষে আপনাকে পুনরাবৃত্তির সীমাটি
মুছে ফেলতে

@ টুক্কাএক্স ক্যাভেট: আমি কোডটি বিশ্লেষণ করলাম না, কিছুটা এন-এর পক্ষে দু'জন প্রার্থীর মধ্যে রান সময়ের বিকাশের তুলনা করে 41 টি লিখেছি এবং ভেবেছিলাম আমি কেবল মন্তব্যটি করব ;-) স্ট্যাক এবং পুনরাবৃত্তি প্রায়শই মাংস সহজ, তবে তারপরে অপ্রীতিকর পরিস্থিতিতে কিভাবে গভীর টাইপ প্রশ্নের জন্য কল ... আশা করি আমি এটা গবেষণার পরিমাণ যে গিয়েছিলাম জন্য ঝাপসা যথেষ্ট উদ্ভাবন করেন।
Dilettant

3

জেলি , 14 13 11 বাইট

Ḋx³ŒPQP=¥Ðf

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

আমি নিশ্চিত যে @ ডেনিসের জেলি সমাধানটি উন্নত হতে পারে be দুর্ভাগ্যক্রমে, আমি ব্র্যাচল্যাগ রেকর্ডটি পরাজিত করতে পরিচালনা করি নি, তবে আমি এটি বেঁধে দেওয়ার ব্যবস্থা করেছিলাম। আপডেট : @ ডেনিসের সহায়তায় এটি এখন উন্নত; আমার ধারণা জেলি মুকুটটি ফিরিয়ে নিয়েছে।

এই প্রোগ্রামটি অবিশ্বাস্যভাবে অক্ষম, ও (2 এন 2 ) পারফরম্যান্স থাকার কারণে (উপরের পরীক্ষার কেসটি এটিকে ইনপুট 4 এর জন্য দেখায়)। এটি 4 এ খুব দ্রুত সম্পন্ন হয় 5 এ খুব ধীরে ধীরে, এবং সম্ভবত বৃহত্তর সংখ্যার জন্য দৌড়ানো সম্ভব নাও হতে পারে।

মজার বিষয় হচ্ছে, ব্র্যাচল্যাগ সমস্যার সমাধান হিসাবে সমাধান (যা ব্র্যাচল্যাগ ভাল) এর সমাধানে যা ইনপুটকে ফ্যাক্টরিজিংয়ের ভিত্তিতে একটি অ্যালগরিদম ব্যবহার করেছিল (যা জেলি ভাল); এরই মধ্যে, জেলি সমাধানটি তার শক্তি থেকে দূরে সরে গিয়ে এবং এমন একটি সমাধানে ফিরে গেছে যা কেবল সমস্যার বর্ণনা দেয়।

ব্যাখ্যা:

Ḋx³ŒPQP=¥Ðf
Ḋ              List of integers from 2 to the input (apparently undocumented)
 x³            Make a number of copies of each that's equal to the input
   ŒP          Take all (possibly noncontiguous) subsequences of that list (!)
     Q         Remove duplicates
         Ðf    Filter, keeping elements where:
      P=         their product is equal to {the original input, by default}
        ¥      Parse preceding two links as a unit

আউটপুটটি Ḋxবাছাই করার কারণে, প্রতিটি অনুচ্ছেদটিও বাছাই করতে হবে এবং সুতরাং আমাদের সেগুলি পৃথকভাবে বাছাই করতে হবে না। সুতরাং "বিভিন্ন অর্ডারে একই আউটপুটটি একটি অনুলিপি" সমস্যার অংশ এবং "আউটপুটে সমস্ত মান হ'ল> 1" সমস্যার অংশ, প্রজন্মের দ্বারা সমাধান হয়ে যায়। তা ছাড়া, আমরা এখানে মূলত যা করছি তা হ'ল "সমস্ত তালিকাগুলি সন্ধান করুন P=³", যা আমরা (অবিশ্বাস্যভাবে অদক্ষ পদ্ধতিতে) প্রশ্নের মধ্যে সমস্ত তালিকা তৈরি করে এবং তারপরে ভুলগুলি ফিল্টার করে।

(স্পষ্টতই, কাউকে জেলি এবং ব্র্যাচল্যাগের একটি হাইব্রিড উদ্ভাবন করা দরকার, পাশাপাশি একটি ভাল বাধা সমাধানকারীও প্রয়োজন, যাতে আমরা {P=³}~আরও কিছু অনুচ্ছেদের কোডের পাশাপাশি কিছু লিখতে পারি এবং প্রোগ্রামটিকে আরও সংক্ষিপ্ত দৈর্ঘ্যে সমাধান করতে পারি That এটি হতে পারে কিছুটা দূরে, যদিও।)


দয়া করে এখানে কেউ সঞ্চয়ের একটি চরিত্র খুঁজে পান। আমি এমন একটি "বাইট যুদ্ধ" পছন্দ করব যাতে প্রতিবারে এন্ট্রিগুলিতে একটি বাইট ছোট হয়। প্রোগ্রামটির কাঠামোগত অংশগুলিতে এখানে যথেষ্ট বাইট অপচয় হয় যা দেখে মনে হয় এটি অসম্পূর্ণ হতে পারে।

1
হেই, আমি প্রায় কিছু আকর্ষণীয়ভাবে পোস্ট করতে চলেছি। (আরও প্রায়শই রিফ্রেশ করা উচিত)) 2rহয়ে উঠতে পারে এবং P=³$$হতে পারে P=¥
ডেনিস

P=¥আমি দোভাষীর সাথে চেষ্টা করার পরে কাজ করে না, যদিও আমি পুরোপুরি নিশ্চিত নই কেন (যুক্তিযুক্তভাবে, এটি কাজ করা উচিত) , এবং পোস্টটি লেখার সময় এটি যে জিনিসগুলির চেষ্টা করেছিলাম তার মধ্যে একটি ছিল; আমি এটি নিশ্চিত করার জন্য আবার চেষ্টা করেছি, এটি অবশ্যই আমি যা প্রত্যাশা করেছি তা করে না। যদিও, তাই আমি অনুমান করি আমাদের ওয়ান বাইট সংরক্ষণ রয়েছে :-)

1
অন্য বিস্তারিত মনোযোগ দেয় নি। আপনি প্রতিস্থাপন করতে চাই µসঙ্গে ¹পাশাপাশি, যেমন µপুনরাবৃত্তি পরিসীমা নতুন বাম যুক্তি করে তোলে।
ডেনিস

ওহ অবশ্যই. সুতরাং এখন আমরা খুব কম অক্ষর সহ 11 এ নেমেছি, যা আমাকে আরও ভাল বোধ করছে। (আমি কেবল বৈচিত্র্যের ³চেয়ে বরং ব্যবহার করেছি ¹))

2

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

f=(n,m=2,a=[])=>n>1?m>n?[]:f(n,m+1,a).concat(f(n/m,m,[...a,m])):[a]

for (var i = 1; i < 31; i++) console.log(JSON.stringify(f(i)));

সরাসরি সমস্যা solves যাও recursively: প্রতিটি পূর্ণসংখ্যা জন্য মি থেকে 2 থেকে এন , আমরা এর পার্টিশন প্রতিটি নেওয়া N / মি কমপক্ষে উপাদান সঙ্গে মি এবং পরিশেষে যোগ (ডুপ্লিকেট পার্টিশন এড়াতে) মি । (যে কোন জন্য মি যে ভাগ করে না এন , এই একটি দশমিক করার পূর্ণসংখ্যার তা বৃদ্ধি পায় কোন ব্যবস্থা যেমন খালি অ্যারে প্রদান করে।) আমরা ফাঁকা অ্যারের একটি বেস কেস সংজ্ঞায়িত 1 অসীম recursion এড়াতে তাই হিসাবে।


1

পাইথন 2, 198 191 172 180 বাইট

from itertools import*
n=input()
for i in range(2,len(bin(n))):
 for P in combinations_with_replacement(range(2,n),i):
  if reduce(lambda a,b:a*b,P)==n:print(P)
print[(n,),()][n<2]

একটি সম্পূর্ণ প্রোগ্রাম। এটি অনেক উন্নত হতে পারে, তাই পরামর্শগুলি গভীরভাবে স্বাগত!

1 থেকে 31 ব্যাপ্তি (অন্তর্ভুক্ত) এর ফলাফলগুলি:

(1,)
(2,)
(3,)
(2, 2), (4,)
(5,)
(2, 3), (6,)
(7,)
(2, 4), (2, 2, 2), (8,)
(3, 3), (9,)
(2, 5), (10,)
(11,)
(2, 6), (3, 4), (2, 2, 3), (12,)
(13,)
(2, 7), (14,)
(3, 5), (15,)
(2, 8), (4, 4), (2, 2, 4), (2, 2, 2, 2), (16,)
(17,)
(2, 9), (3, 6), (2, 3, 3), (18,)
(19,)
(2, 10), (4, 5), (2, 2, 5), (20,)
(3, 7), (21,)
(2, 11), (22,)
(23,)
(2, 12), (3, 8), (4, 6), (2, 2, 6), (2, 3, 4), (2, 2, 2, 3), (24,)
(5, 5), (25,)
(2, 13), (26,)
(3, 9), (3, 3, 3), (27,)
(2, 14), (4, 7), (2, 2, 7), (28,)
(29,)
(2, 15), (3, 10), (5, 6), (2, 3, 5), (30,)
(31,)

এটি কি কাজ করে? 4 -> {2, 2}, {4}প্রশ্নে পরীক্ষার কেস রয়েছে, আপনার লগতে আমি এ জাতীয় আউটপুট দেখতে পাচ্ছি না।
বোরসুনহো

@ বারসুনহো আমি পুরানো সংস্করণটি রোলার করার সাথে সাথে আমি +1 যুক্ত করতে ভুলে গিয়েছিলাম int(math.log(n,2)), যার কারণ এটি ছিল। +2 বাইট এবং এটি কাজ করবে। ধন্যবাদ!
Yytsi

আপনি আমদানি mathকরেননি তবে ব্যবহার করছেনmath.log
orlp

@orlp আমার আছে ...? তৃতীয় লাইনে।
Yytsi

@ টুক্কাএক্স এক্সকিউজ, আমি, আমি কেবল আমদানির শীর্ষস্থানীয় লাইনগুলিতে তাকিয়ে থাকি, কারণ তারা প্রায় সবসময় সেখানে থাকে ... যা বলা হচ্ছে, len(bin(n))-2তার চেয়ে ছোটint(math.log(n,2))
orlp


1

ক্লোজার, 91 বাইট

(defn f[n](conj(set(for[i(range 2 n):when(=(mod n i)0)j(f(/ n i))](sort(flatten[i j]))))n))

উদাহরণ রান:

(map f [20 84])
(#{20 (2 2 5) (4 5) (2 10)} #{(7 12) (2 2 3 7) (2 3 14) (2 2 21) (2 6 7) (6 14) (3 4 7) (3 28) (4 21) (2 42) 84})

মানটি নিজেই একক সংখ্যা হিসাবে ফিরে আসে (ক list) নয়, অন্যরা তালিকা হিসাবে প্রকাশিত হয়। nশেষে দ্বারা প্রতিস্থাপিত হতে পারে [n]এটা একটা ক্রম হিসাবে ভাল করতে, বা(list n) এটা একটি তালিকা তৈরি করা হয়।



0

জে, 35 বাইট

([:~.]<@/:~@(*//.)"$~#\#:i.@!@#)@q:

একটি সময়-সীমাবদ্ধ ফ্যাক্টরীকরণ চ্যালেঞ্জের সমাধানের ভিত্তিতে ।

এই সংস্করণটি অনেক বেশি অদক্ষ এবং মূল কারণগুলির সংখ্যার উপর ভিত্তি করে ঘটনাগত সময়ে চালিত হয়। ফ্যাকটোরেডিক সংখ্যা তৈরি করে পার্টিশন তৈরি করে।

এটি অনলাইন চেষ্টা করুন!(অনলাইনে বড় মান চেষ্টা করে দেখুন না!)

ব্যাখ্যা

([:~.]<@/:~@(*//.)"$~#\#:i.@!@#)@q:  Input: integer n
                                 q:  Prime factorization
(                              )@    Operate on them
                              #        Length
                            !@         Factorial
                         i.@           Range [0, i)
                     #\                Range [1, i]
                       #:              Mixed based conversion - Creates factoradic values
     ]                                 Get factors
            (    )"$~                  For each factoradic value
               /.                        Partition the factors based on equal
                                         digits in the factoradic value
             */                          Get the product of each block
        /:~@                             Sort it
      <@                                 Box it
 [:~.                                  Deduplicate

0

ডি, 95 বাইট

void g(int n,int[]r){for(int i=r[0];i*i<=n;i++)(n%i)?0:g(n/i,i~r);r.back=n;r.writeln;}g(n,[2]);

কেবল একটি পুনরাবৃত্ত সমাধান। মধ্যে g(n,r), rএখন পর্যন্ত পার্টিশনটি কি, এবং nমানটি এখনও ফ্যাক্টরগুলিতে বিভক্ত হয়। প্রতিটি rঅ- অর্ডারযুক্ত পার্টিশনটি একবারে পেতে, আমরা অ-ক্রমবর্ধমান ক্রমে ফ্যাক্টরগুলি সাজিয়েছি। সর্বশেষতম উপাদানটি সর্বনিম্ন সম্ভাব্য ফ্যাক্টর হিসাবে rশুরু হয় 2এবং nপ্রতিটি আউটপুট ক্রিয়াকলাপের ঠিক আগে প্রতিটি অনুলিপিটিতে ওভাররাইট হয়ে যায়।

এর জন্য n = 60আউটপুট নিম্নরূপ:

[3, 2, 2, 5]
[2, 2, 15]
[3, 2, 10]
[5, 2, 6]
[2, 30]
[4, 3, 5]
[3, 20]
[4, 15]
[5, 12]
[6, 10]
[60]

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


টেমপ্লেটগুলি ব্যবহার করুন, গাসা, টেমপ্লেটগুলি ব্যবহার করুন:void g(T)(T n,T[]r){for(T i=r[0];i*i<=n;i++)n%i0:r;r.back=n;r.writeln;}g(n,[2])
জাকারি

যাইহোক, এটি এমনকি একটি বৈধ উত্তর নয়, যেমন আপনার আমদানি করা দরকার std.stdioএবং std.rangeইনপুটটি 1কোনও কিছুই মুদ্রণ করবে, নয় [1]
জাকারি

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