এম পূর্ণসংখ্যার পণ্য হিসাবে এন লিখার কতগুলি উপায়?


12

একটি পূর্ণসংখ্যার এন দেওয়া হয়েছে , এটি এম পূর্ণসংখ্যার> 1 এর পণ্য হিসাবে প্রকাশ করা যেতে পারে তার কতগুলি উপায় তা গণনা করুন ।

ইনপুটটি কেবল N এবং M হয় এবং আউটপুটটি পৃথক পূর্ণসংখ্যার গোষ্ঠীর মোট গণনা । মানে আপনি একাধিকবার পূর্ণসংখ্যা ব্যবহার করতে পারবেন তবে প্রতিটি গ্রুপ অবশ্যই আলাদা হবে ( উপস্থিত 3 x 2 x 2থাকলে তা গণনা করা হবে না 2 x 2 x 3)।

সীমাবদ্ধতাসমূহ

1 < এন <2 31
1 < এম <30

উদাহরণ

ইনপুট 30 2আউটপুট দেয় 3, যেহেতু এটি 3 উপায়ে প্রকাশ করা যেতে পারে:

2 x 15
3 x 10
5 x 6

ইনপুট 16 3আউটপুট দেয় 1, যেহেতু কেবল একটি পৃথক গ্রুপ রয়েছে:

2 x 2 x 4

ইনপুট 2310 4আউটপুট দেয় 10:

5 x 6 x 7 x 11
3 x 7 x 10 x 11
3 x 5 x 11 x 14
3 x 5 x 7 x 22
2 x 7 x 11 x 15
2 x 5 x 11 x 21
2 x 5 x 7 x 33
2 x 3 x 11 x 35
2 x 3 x 7 x 55
2 x 3 x 5 x 77

ইনপুট 15 4আউটপুট দেয় 0, যেহেতু এটি করা যায় না।

বিধি

ইনপুট / আউটপুট জন্য স্ট্যান্ডার্ড সংজ্ঞা সহ স্ট্যান্ডার্ড কোড গল্ফ লুফোলস প্রযোজ্য। উত্তরগুলি কোনও ফাংশন বা সম্পূর্ণ প্রোগ্রাম হতে পারে। ফ্যাক্টরীকরণ এবং / অথবা পার্টিশন করার জন্য অন্তর্নির্মিত ফাংশনগুলির অনুমতি নেই তবে অন্যরা ভাল আছেন। কোড বাইটে গণনা করা হয়।


বিভাজন বলতে কী বোঝ?
অপ্টিমাইজার

@ অপ্টিমাইজারটি নোনওভারল্যাপিং সাবলিস্টগুলিতে একটি তালিকা তৈরি করছে। কিছু ভাষায় এটি অন্তর্নির্মিত রয়েছে, যেমন ম্যাথমেটিকা
Geobits

সময়সীমা আছে? একটি বিশেষভাবে নিষ্পাপ অ্যালগরিদম এম এর বৃহত মানটির জন্য কয়েক শতাব্দী সময় নিতে পারে যেমন লক্ষণীয় মত সাধারণ জিনিসগুলি স্কয়ার্ট (এন) এর চেয়ে বড় এক কারণ হতে পারে স্পষ্টতই অনেকটা সহায়তা করে।
স্তর নদী সেন্ট

1
@ স্টেভেভারিল এন- এর উপরের সীমাটি দেওয়া হয়েছে , কেবলমাত্র 30 (প্রধান) উপাদান থাকা উচিত, যা কিছুটা গতি বাড়িয়ে তোলে । তবে নির্দোষ হতে নির্দ্বিধায়। যদি আপনার অ্যালগরিদম কয়েক ঘন্টার মধ্যে কোনও উত্তর সরবরাহ না করে, তবে ধারণার একটি সুস্পষ্ট ব্যাখ্যা প্রমাণ ভোটারদের সিদ্ধান্ত নিতে সহায়তা করতে পারে।
জিওবিটস

একটি বিল্ট যা আপনাকে দুটি তালিকার কার্টেসিয়ান পণ্যটি করার অনুমতি দেয়?
অপ্টিমাইজার

উত্তর:


5

পাইথ - 24 23 22 21 বাইট

জটিল সমাধান নয়। আরও গল্ফ হবে। কেবল তালিকা এবং ফিল্টারগুলির কার্তেসিয়ান পণ্য গ্রহণ করে। @ ওপটিমাইজার হিসাবে একই কৌশল (আমি তার মন্তব্যের কারণে অনুমান করছি, আসলে সে সিজে্যামের অর্থোদ্ধার হয়নি) এম ফ্রিঅ্যাম দ্য এজম্যানকে 2 বাইটের জন্য ধন্যবাদ এবং এম এর সাথে কৌশলটি

Ml{m`Sdfqu*GHT1G^r2GH

gআরগস সহ একটি ফাংশন সংজ্ঞায়িত করে GএবংH

M                    function definition of g with args G and H
 l                   length of
  {                  set (eliminates duplicates)
   m                 map
    `Sd              repr of sorted factors so can run set (on bash escape ` as \`)
    f                filter
     q      G        equals first arg
      u*GHT1         reduce by multiplication
     ^     H         cartesian product by repeat second arg
       r2G           range 2 to first arg

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


ইনপুটটি সেই বিন্যাসে ভাল।
জিওবিটস

1
পাইথ গল্ফ টিপ: আপনি যদি 2 টি আর্গুমেন্ট পান তবে এটি সাধারণত ব্যবহারের চেয়ে কম হয় Mযা g2 টি আর্গুমেন্টের কার্যকারিতা সংজ্ঞায়িত করে Gএবং H। এই আমি এই জন্য কি পেতে হল: Ml{msdfqu*GHT1G^r2GH। অন্য পাইথ ব্যবহারকারী দেখতে সর্বদা দুর্দান্ত :)
ফ্রাইআম দ্য ইজিগম্যান

টিপটির জন্য @ ফ্রাইআম দ্য এজিগম্যান আপডেট হয়েছে।
মালতীসেন

1
এটি 72 3(2, 2, 18), (2, 3, 12), (2, 4, 9), (2, 6, 6), (3, 3, 8)
ইনপুটটির

1
@ আইসাকগ ওহ ঠিক আছে, আমি এটি আমার 21 চর সংস্করণে ফিরিয়ে দেব। আমি ভাবিনি যে এটি সংশ্লেষ কাজ করবে তবে এটি মনে হয়েছিল, তাই আমি আবার প্রকাশ করতে যাব। ধরার জন্য ধন্যবাদ
মালতিসেন 27'15 '20:32

9

পাইথন 3, 59

f=lambda N,M,i=2:i<=N and f(N/i,M-1,i)+f(N,M,i+1)or-~M==N<2

আমরা সম্ভাব্য বিভাজনগুলি গণনা করি iiসর্বনিম্ন অনুমোদিত বিভাজক হিসাবে অতিরিক্ত যুক্তির সাথে , মূল পুনরাবৃত্তির সম্পর্ক

f(N,M,i)=f(N/i,M-1,i)+f(N,M,i+1)

প্রত্যেকের জন্য i, আমরা হয় এটি অন্তর্ভুক্ত করতে বেছে নিই (পুনরাবৃত্তি হিসাবে সম্ভব), এক্ষেত্রে আমরা প্রয়োজনীয় পণ্যটি এবং হ্রাস Nদ্বারা বিভক্ত করি । যদি আমরা এটি না করি তবে আমরা 1 টি বাড়িয়েছি , তবে কেবল তখনই , যেহেতু এর চেয়ে বড় বিভাজনগুলি পরীক্ষা করার কোনও সুবিধা নেই ।iMii<NN

যখন সর্বনিম্ন বিভাজক iঅতিক্রম করে N, তখন আর কোনও সম্ভাব্য বিভাজন থাকে না। সুতরাং, আমরা পরীক্ষা করে দেখেছি যে আমরা M==0 and N==1, বা, সমতুল্যভাবে, M+1==N==1বা M+1==N<2, যেহেতু M+1==N, পারস্পরিক মানটি ইতিবাচক পূর্ণসংখ্যা হিসাবে গ্যারান্টিযুক্ত (এই অপ্টিমাইজেশনের জন্য FryAmTheEggman এর জন্য ধন্যবাদ) দেখেছি।

এই কোডটি Nবেশিরভাগ সিস্টেমে প্রায় 1000 এর জন্য একটি স্ট্যাক ওভারফ্লোতে কারণ হিসাবে চিহ্নিত করে তবে এটি এড়াতে আপনি স্ট্যাকলেস পাইথনে এটি চালাতে পারেন । তদ্ব্যতীত, এটির ঘনঘটিত পুনরাবৃত্তি শাখার কারণে এটি অত্যন্ত ধীর।


আমি মনে করি আপনি ব্যবহার করতে পারবেন-~M==N<2
FryAmTheEggman

@FryAmTheEggman আমি যে মিথ্যা positives দিতে হবে, কিন্তু প্রকৃতপক্ষে এটা উপর যৌথ সীমাবদ্ধতার কাজ করে, ধন্যবাদ Mএবং N। ধন্যবাদ!
xnor

4

রুবি, 67

f=->n,m,s=2,r=0{m<2?1:s.upto(n**0.5){|d|n%d<1&&r+=f[n/d,m-1,d]}&&r}

পুনরাবৃত্ত সংজ্ঞা জন্য আসলে যুক্তিসঙ্গতভাবে দক্ষ। [d,q]এন এর প্রতিটি বিভাজক জোড়ার জন্য, dছোটটি হওয়ার সাথে আমরা এর ফলাফলটি যোগ করব f[q,m-1]। জটিল অংশটি হ'ল অভ্যন্তরীণ কলগুলিতে আমরা ফ্যাক্টরগুলিকে ডি এর চেয়ে বেশি বা সমানকে সীমাবদ্ধ করি যাতে আমরা দ্বিগুণ গণনা শেষ না করি।

1.9.3-p327 :002 > f[30,2]
 => 3 
1.9.3-p327 :003 > f[2310,4]
 => 10 
1.9.3-p327 :004 > f[15,4]
 => 0 
1.9.3-p327 :005 > f[9,2]
 => 1 

2

সিজেম, 48 বাইট

এটি অনেক খাটো হতে পারে Mতবে অনলাইন সংকলকটিতে শালীন সংখ্যার জন্য এটি কাজ করার জন্য আমি কয়েকটি নির্দিষ্ট চেক যুক্ত করেছি ।

q~\:N),2>{N\%!},a*{_,2/)<m*{(+$}%}*{1a+:*N=},_&,

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


এটি বগি। ইনপুট চেষ্টা করুন 2 1। প্রত্যাশিত আউটপুট: 1. প্রকৃত আউটপুট: 0.
পিটার টেলর

পছন্দ করুন সংশোধন করা হয়েছে।
অপ্টিমাইজার

2

টি-এসকিউএল 456 373

আমি নিশ্চিত যে ইনপুটগুলি বড় হওয়ার কাছাকাছি থাকলে এটি ভেঙে যাবে।

একাধিক এসইটির পরিবর্তে কনক্যাট এবং নির্বাচন সহ অনেকগুলি অক্ষর সংরক্ষণ করতে সহায়তা করার জন্য @ মিকিটিকে ধন্যবাদ জানাই Thanks

CREATE PROC Q(@N INT,@M INT)AS
DECLARE @ INT=2,@C VARCHAR(MAX)='SELECT COUNT(*)FROM # A1',@D VARCHAR(MAX)=' WHERE A1.A',@E VARCHAR(MAX)=''CREATE TABLE #(A INT)WHILE @<@N
BEGIN
INSERT INTO # VALUES(@)SET @+=1
END
SET @=1
WHILE @<@M
BEGIN
SELECT @+=1,@C+=CONCAT(',# A',@),@D+=CONCAT('*A',@,'.A'),@E+=CONCAT(' AND A',@-1,'.A<=A',@,'.A')END
SET @C+=CONCAT(@D,'=',@N,@E)EXEC(@C)

আমি এটি upvote করতে চান, কিন্তু আমি এটি পরীক্ষা করার সহজ উপায় খুঁজে পাচ্ছি না। কোন ধারনা? এটি কাজ করে তাও তৃতীয় পক্ষের নিশ্চিতকরণ ভাল।
জিওবিটস

আমি এটি পরিচালনা করি (2012) আমি কয়েকটি রূপান্তর ত্রুটি পেয়েছি। তারা এই বিবৃতিগুলি থেকে প্রদর্শিত হবে SET @C+=',# A'+@এবংSET @D+='*A'+@+'.A'SET @E+=' AND A'+(@-1)+'.A<=A'+@+'.A'
মিকিটি

আপনারও ঠিক করতে হবে SET @C+=@D+'=@N'+@E+' SELECT @'@Nভিতরে এটা আওতার বাইরে উপার্জন কোট যখন আপনি চালানো হয় @C। এছাড়াও আমি মনে করি আপনি
নকলগুলি

এখন আমি এটি 2012 এ পরীক্ষা করেছি It এটি কাজ করা উচিত।
২২

2
এখনই ভাল কাজ করে :) এমন কয়েকটি জায়গা যেখানে আপনি কয়েকটি অক্ষর শেভ করতে পারেন। CONCATআপনার স্ট্রিং তৈরি করতে ব্যবহার করার চেষ্টা করুন । তারপরে আপনি এসগুলি বাদ দিতে পারেন CONVERTSELECT @+=1,@C+=CONCAT(...),@D+=CONCAT(...),@E+=CONCAT(...)আপনার WHILEলুপে চেষ্টা করুন । আপনার যুক্তিসঙ্গত সংখ্যাটি সংরক্ষণ করা উচিত
মিকিটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.