মিশরীয় ভগ্নাংশ


20

সংক্ষিপ্ত বিবরণ:

উইকিপিডিয়া থেকে : মিশরীয় ভগ্নাংশটি পৃথক ইউনিটের ভগ্নাংশের যোগফল। এটি হ'ল, ভাবের প্রতিটি ভগ্নাংশের 1 এবং সমান একটি সংখ্যক থাকে যা একটি ধনাত্মক পূর্ণসংখ্যা হয় এবং সমস্ত সংখ্যক একে অপরের থেকে পৃথক হয়। এই ধরণের এক্সপ্রেশনটির মান হ'ল ধনাত্মক যুক্তিযুক্ত সংখ্যা a / b। প্রতিটি ধনাত্মক যুক্তিযুক্ত সংখ্যা একটি মিশরীয় ভগ্নাংশ দ্বারা প্রতিনিধিত্ব করা যেতে পারে।

চ্যালেঞ্জ:

সংক্ষিপ্ততম ফাংশনটি লিখুন যা নির্দিষ্ট ইউনিট ভগ্নাংশের ক্ষুদ্রতম সেটগুলির জন্য সমস্ত সংখ্যার মানগুলিকে ফিরিয়ে দেবে যা প্রদত্ত ভগ্নাংশের যোগ করে।

বিধি / সীমাবদ্ধতাসমূহ:

  • ইনপুট দুটি ধনাত্মক পূর্ণসংখ্যার মান হবে।
    • এই করা যেতে পারে STDIN, argv, কমা দ্বারা পৃথক, স্থান সীমায়িত, বা অন্য কোন পদ্ধতি পছন্দ করে।
  • প্রথম ইনপুট মানটি হবে সংখ্যার এবং দ্বিতীয় ইনপুট মানটি ডিনোমিনেটর।
  • প্রথম ইনপুট মানটি দ্বিতীয়টির চেয়ে কম হবে।
  • আউটপুটটিতে এমন একটি মান (গুলি) অন্তর্ভুক্ত থাকতে পারে যা আপনার সিস্টেম / ভাষার স্মৃতি সীমাবদ্ধতা ছাড়িয়ে যায় (র‌্যাম, ম্যাক্সএনপিটি বা অন্য কোনও কোড / সিস্টেমের সীমাবদ্ধতা)। যদি এটি ঘটে থাকে তবে কেবলমাত্র সর্বোচ্চ সম্ভাব্য মান অনুসারে ফলাফল কেটে ফেলুন এবং মনে রাখবেন যে কোনওরকম (যেমন ...)।
  • আউটপুট কমপক্ষে 2,147,483,647 (2 31 -1, স্বাক্ষরিত 32-বিট int) পর্যন্ত ডিনোমিনেটর মান পরিচালনা করতে সক্ষম হওয়া উচিত ।
    • একটি উচ্চতর মান ( longইত্যাদি) পুরোপুরি গ্রহণযোগ্য।
  • আউটপুটটি পাওয়া যাবে ইউনিট ভগ্নাংশগুলির বৃহত্তম সংকলনের (বা ভগ্নাংশ নিজেরাই, অর্থাৎ 1/2) সর্বকেন্দ্রের সমস্ত মানের একটি তালিকা ।
  • আউটপুটটি ডিনোমিনেটরের মান অনুযায়ী (ভগ্নাংশের মান দ্বারা অবতরণ) অনুসারে আরোহণের আদেশ দেওয়া হবে।
  • আউটপুটটি আপনার ইচ্ছামতো যেভাবেই সীমিত করা যায়, তবে এর মধ্যে একটি চরিত্র অবশ্যই থাকবে যাতে পরের থেকে একটি মান আলাদা করতে পারে।
  • এটি কোড গল্ফ, তাই সংক্ষিপ্ততম সমাধানটি জয়লাভ করে।

Exmaples:

  • ইনপুট 1:

    43, 48

  • আউটপুট 1:

    2, 3, 16

  • ইনপুট 2:

    8/11

  • আউটপুট 2:

    1/2 1/6 1/22 1/66

  • ইনপুট 3:

    5 121

  • আউটপুট 3:

    33 121 363


ইনপুট / আউটপুট 2 হওয়া উচিত 8, 11এবং 2, 6, 22, 66ঠিক?
মেল্লামবক

2
সুস্পষ্টতা অপসারণের জন্য একটি সম্ভাব্য পরামর্শ, সর্বনিম্ন চূড়ান্ত ডিনোমিনেটরের সাথে ইউনিট ভগ্নাংশের সর্বনিম্ন সেট প্রয়োজন। উদাহরণস্বরূপ, ইনপুট জন্য 1/2 1/6 1/22 1/66পছন্দনীয় হবে । 1/2 1/5 1/37 1/40708/11
primo

2
আমি 5/121 = 1/33+1/121+1/363পরীক্ষার কেসগুলিতে যুক্ত করার পরামর্শ দিই । সমস্ত লোভী প্রোগ্রাম (আমার সহ) এর জন্য 5 ভগ্নাংশ দেয়। উদাহরণ উইকিপিডিয়া থেকে নেওয়া ।
উগোরেন

1
@ প্রিমো আমি মনে করি যে যদি একাধিক ন্যূনতম হয়, তবে যাকে পাওয়া যাবে তা গ্রহণযোগ্য হবে। ফলস্বরূপ যদি একটি অ্যালগরিদম কম অক্ষর দিয়ে লেখা যায় তবে আমি এই সমাধানটি বাধা দিতে চাই না।
গাফি

1
+1 দিয়েছে যেহেতু আমি আসলে ইতিহাসের গণিত কোর্সে মিশরীয় ভগ্নাংশগুলি সম্পর্কে শিখেছি (এবং তাদের সাথে গণিতও করতে হয়েছিল, পাশাপাশি এই সমস্যার মতো ভগ্নাংশের পরিমাণগুলিও খুঁজে পেয়েছি।) একটি দুর্দান্ত এবং সৃজনশীল চ্যালেঞ্জ।
mbomb007

উত্তর:


6

সাধারণ লিস্প, ১৩7 টি অক্ষর

(defun z(n)(labels((i(n s r)(cond((= n 0)r)((< n(/ 1 s))(i n(ceiling(/ 1 n))r))(t(i(- n(/ 1 s))(1+ s)(cons s r))))))(reverse(i n 2'()))))

(z 43/48) -> (2 3 16)

(জেড 8/11) -> (2 5 37 4070)

(জেড 5/121) -> (25 757 763309 873960180913 1527612795642093418846225)

বিপুল সংখ্যক, বা ভগ্নাংশের স্বরলিপি পরিচালনা সম্পর্কে চিন্তা করার দরকার নেই!


(ডিফুন জেড (এন) (লেবেল ((আমি (এনএসআর)) (কনড ((= এন 0) আর)) ((<এন (/ 1 এস))) (সিলিং (/ 1 এন)) আর)) (টি ( i (- n (/ 1 s)) (1+ s) (cons sr))))) (বিপরীত (2 '() এর মধ্যে))) (z 43/48) টিওতে ফলাফল দেখায় না ... ফলাফল মুদ্রণের জন্য আমার কী ব্যবহার করতে হবে?
রোজলুপি

1
(মুদ্রণ (জেড 103/333)) 5 সংখ্যার একটি তালিকা ফেরত দেয় তবে 4 টি সংখ্যার একটি তালিকা উপস্থিত থাকবে: 1 / 4,1 / 18,1 / 333,1 / 1332। সুতরাং উপরের ফাংশনটি সর্বনিম্ন ফেরত দেয় না।
রোজলুপি

8

পাইথন 2, 169 167 অক্ষর

x,y=input()
def R(n,a,b):
 if n<2:return[b/a][b%a:]
 for m in range((b+a-1)/a,b*n/a):
  L=R(n-1,a*m-b,m*b)
  if L:return[m]+L
n=L=0
while not L:n+=1;L=R(n,x,y)
print L

স্টিডিনে কমা-বিভাজিত আরগস নিয়ে থাকে এবং স্টডআউটে একটি অজগর তালিকা প্রিন্ট করে।

$ echo 8,11 | ./egypt.py 
[2, 5, 37, 4070]

2
1. আমি মনে করি আপনি দ্বিতীয় ইনডেন্টেশন স্তরে ট্যাব ব্যবহার করে দুটি অক্ষর সংরক্ষণ করতে পারেন। ২. সিস্টেমের মেমরির সীমাবদ্ধতা অতিক্রম করার কারণে স্ক্রিপ্টটি কাটা কাটা নির্দেশ করে না।
ব্রেডবক্স

টিওতে আপনার কোডটি কেবল 103/45533 এর জন্য মেমরির বাইরে চলে যায়
রোজলুপি

পরিবর্তে আইডিয়নে আপনার কোড একই ইনপুট 103,45533 জন্য রান টাইম ত্রুটিতে চলে যায়: রানটাইম ত্রুটি # স্টাডিন # স্টডআউট # স্টাডার 0.89 এস 99264 কেবি
রোজলুপি

4

পিএইচপি 82 বাইট

<?for(fscanf(STDIN,"%d%d",$a,$b);$a;)++$i<$b/$a||printf("$i ",$a=$a*$i-$b,$b*=$i);

এটি আরও খাটো করা যেতে পারে তবে ভাসমান পয়েন্টের বৃত্তাকার ত্রুটি (বর্তমান ভগ্নাংশটি রাখার পরিবর্তে) এড়াতে বর্তমান সংখ্যা এবং ডিনোমিনেটরকে পুরো সংখ্যা হিসাবে রাখা দরকার।

নমুনা ব্যবহার:

$ echo 43 48 | php egyptian-fraction.php
2 3 16
$ echo 8 11 | php egyptian-fraction.php
2 5 37 4070

কমা অপারেটর প্রিন্টফের অকেজো যুক্তি হিসাবে ইমুলেটেড? আমার এই কৌশলটি কোথাও সংরক্ষণ করা উচিত।
কনরাড বোরোস্কি

1
আমি নিশ্চিত যে এটি লোভী অ্যালগরিদম , তাই এটি সর্বদা ক্ষুদ্রতম ভগ্নাংশ দেয় না। আপনি যদি এটির মতো ইনপুট দিয়ে চালনা করেন 5 121বা 31 311এটি ভুল উত্তর দেবে (খুব দীর্ঘ সময় পরে)।
grc

@grc 31/311 -> {a [1] -> 11, a [2] -> 115, এ [3] -> 13570, এ [4] -> 46422970}
ডঃ বেলিসেরিয়াস

4

সি, 163 177 অক্ষর

6/6 : শেষ অবধি , প্রোগ্রামটি এখন সমস্ত ক্ষেত্রে সঠিকভাবে কাটা পরিচালনা করে। আমি প্রত্যাশার চেয়ে অনেক বেশি চর নিয়েছিলাম তবে এটি সার্থক ছিল was প্রোগ্রামটির এখন 100% সমস্যার প্রয়োজনীয়তা মেনে চলতে হবে।

d[99],c,z;
r(p,q,n,i){for(c=n+q%p<2,i=q/p;c?d[c++]=i,0:++i<n*q/p;)q>~0U/2/i?c=2:r(i*p-q,i*q,n-1);}
main(a,b){for(scanf("%d%d",&a,&b);!c;r(a,b,++z));while(--c)printf("%d\n",d[c]);}

প্রোগ্রামটি স্ট্যান্ডার্ড ইনপুটটিতে সংখ্যক এবং ডিনোমিনেটর নেয়। ডোনমিনেটরগুলি প্রতি লাইনে একটি করে স্ট্যান্ডার্ড আউটপুট প্রিন্ট করা হয়। ছাঁটাই আউটপুট তালিকাটির শেষে একটি শূন্য ডিনোমিনেটর মুদ্রণ দ্বারা নির্দেশিত:

$ ./a.out
2020 2064
2
3
7
402
242004

$ ./a.out
6745 7604
2
3
19
937
1007747
0

দ্বিতীয় উদাহরণে ডোনমিনেটরগুলির সমষ্টি 95485142815/107645519046, যা প্রায় 1e-14 দ্বারা 6745/7604 থেকে পৃথক।


আবার, আমি মনে করি এটি একটি লোভী অ্যালগরিদম।
grc

বাইরেরতম লুপটি এন + 1 ডিনোমিনেটরগুলির উত্তরগুলির পরীক্ষা করা শুরু করার আগে এন ডিনোমিনেটরগুলির সমস্ত সম্ভাব্য উত্তরগুলি সন্ধান করে। আপনি একে লোভী বলতে পারেন, আমি মনে করি তবে আমি বিশ্বাস করি এটি বর্ণিত সমস্যাটি পূরণ করে ills
ব্রেডবক্স

দুঃখিত, আমি এটি ফিরিয়ে নিয়েছি। এটি লোভী সমাধান অনুসরণ করে না, তবে আমি খুঁজে পেয়েছি যে এটি কিছু ইনপুট ( 31 311উদাহরণস্বরূপ) জন্য সম্পূর্ণ নির্ভুল নয় ।
grc

31 311উপচে পড়েছে, তবে প্রোগ্রামটি এটি ফ্ল্যাগ করতে ব্যর্থ।
ব্রেডবক্স

3

পাইথন, 61 টি অক্ষর

এসটিডিআইএন থেকে ইনপুট, কমা বিচ্ছিন্ন।
STDOUT এ আউটপুট, নতুন লাইন পৃথক।
সর্বদা সংক্ষিপ্ত উপস্থাপনা ফিরে আসে না (যেমন 5/121 এর জন্য)।

a,b=input()
while a:
    i=(b+a-1)/a
    print"1/%d"%i
    a,b=a*i-b,i*b

অক্ষরবিহীন নিউলাইনগুলি ছাড়াই গণনা করা অক্ষর (যেমন whileব্যবহারের মধ্যে সমস্ত লাইনে যোগ দেওয়া ;)।
ভগ্নাংশটি হ'ল a/b
iহয় b/a, বৃত্তাকার আপ তাই আমি জানি 1/i <= a/b
মুদ্রণ পর 1/i, আমি প্রতিস্থাপন a/bসঙ্গে a/b - 1/i, যা (a*i-b)/(i*b)


আমি এটিকে ভোট দিতে চাই, যেহেতু এটি খুব ছোট, তবে এটি কেবল একটি টুকরো মিস করছে!
গাফি

2
আমি এই এক টুকরোটি ঠিক করতে চাই, তবে তারপরে এটি এত ছোট হবে না ... আমার মনে হয় আমি কেবল কিথ র্যান্ডাল এর সমাধানটি পুনরুদ্ধার করব।
ugoren

2

সি, 94 বাইট

n,d,i;main(){scanf("%i%i",&n,&d);for(i=1;n>0&++i>0;){if(n*i>=d)printf("%i ",i),n=n*i-d,d*=i;}}

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

সম্পাদনা: কোডের একটি সংক্ষিপ্ত সংস্করণ মন্তব্যগুলিতে পোস্ট করা হয়েছিল যাতে আমি এটি প্রতিস্থাপন করেছি। ধন্যবাদ!


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

@ ডিজেএমসিএমহেম আপনাকে ধন্যবাদ স্যার, বুঝেছেন এবং সম্পন্ন করেছেন।
ち わ 密

হাই, পিপিসিজিতে আপনাকে স্বাগতম! চ্যালেঞ্জের পরীক্ষার ক্ষেত্রে আপনি কি পরীক্ষার কোডের সাথে একটি ট্রিআইটঅনলাইন-লিঙ্ক যুক্ত করতে পারেন? এছাড়াও, কিছু জিনিস যা আপনি গল্ফ for(i=2;n>0&&i>0;i++)করতে পারেন : হতে পারে for(i=1;n>0&++i>0;); ফর-লুপের বন্ধনীগুলি সরানো যেতে পারে (কারণ এটির কেবল ifঅভ্যন্তরীণ অংশ রয়েছে); d=d*i;হতে পারে d*=i;; এবং আমি সম্পূর্ণরূপে নিশ্চিত নই, কিন্তু আমি মনে করি #include <stdio.h>স্পেস ছাড়া হতে পারে: #include<stdio.h>। ওহ, এবং এটি পড়তে আকর্ষণীয় হতে পারে সি golfing জন্য টিপস এবং মধ্যে golfing জন্য টিপস <সমস্ত ভাষা>
কেভিন Cruijssen

টিপসটির জন্য ধন্যবাদ
うちわ密か


1

স্ট্যাক্স , 18 বাইট

é├WüsOΩ↨÷╬6H╒σw[▐â

এটি চালান এবং এটি ডিবাগ করুন

প্রতিটি পদক্ষেপে এটি পরবর্তী সংখ্যাকে ছোট করার চেষ্টা করে । এটি কাজ করে বলে মনে হচ্ছে, তবে আমি এটি প্রমাণ করতে পারি না।


0

এক্সআইওএম, 753 বাইট

L==>List FRAC INT
macro  M(q)==if c<m or(c=m and m<999 and reduce(max,map(denom,q))<xv)then(m:=c;a:=q;xv:=reduce(max,map(denom,a)))
f(x,n)==(y:=x;a:L:=[];c:=0;q:=denom x;q:=q^4;for i in n.. repeat((c:=c+1)>50=>(a:=[];break);1/i>y=>1;member?(1/i,a)=>1;a:=concat(a,1/i);(y:=y-1/i)=0=>break;numer(y)=1 and ~member?(y,a)=>(a:=concat(a,y);break);(i:=floor(1/y))>q=>(a:=[];break));a)
h(x:FRAC INT):L==(a:L:=[];x>1=>a;numer(x)=1=>[x];n:=max(2,floor(1/x));xv:=m:=999;d:=denom x;zd:=divisors d;z:=copy zd;for i in 2..30 repeat z:=concat(z,i*zd);d:=min(10*d,n+9*m);for i in n..d repeat((c:=maxIndex(b:=f(x,i)))=0=>1;c>m+1=>1;M(b);v:=reduce(+,delete(b,1));for j in z repeat((c:=1+maxIndex(q:=f(v,j)))=1=>1;member?(b.1,q)=>1;q:=concat(b.1,q);M(q)));reverse(sort a))

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

-- this would be the "Greedy Algorithm"
fracR(x,n)==
   y:=x;a:L:=[];c:=0;q:=denom x;q:=q^4
   for i in n.. repeat
      (c:=c+1)>50   =>(a:=[];break)
      1/i>y         =>1
      member?(1/i,a)=>1
      a:=concat(a,1/i)
      (y:=y-1/i)=0  =>break
      numer(y)=1 and ~member?(y,a)=>(a:=concat(a,y);break)
      (i:=floor(1/y))>q           =>(a:=[];break)
   a

-- Return one List a=[1/x1,...,1/xn] with xn PI and x=r/s=reduce(+,a) or return [] for fail
Frazione2SommaReciproci(x:FRAC INT):L==
    a:L:=[]
    x>1       =>a
    numer(x)=1=>[x]
    n:=max(2,floor(1/x));xv:=m:=999;d:=denom x;zd:=divisors d;z:=copy zd
    for i in 2..30 repeat z:=concat(z,i*zd)
    d:=min(10*d,n+9*m) 
    for i in n..d repeat
        (c:=maxIndex(b:=fracR(x,i)))=0=>1 
        c>m+1                         =>1
        M(b)
        v:=reduce(+,delete(b,1))
        for j in z repeat
              (c:=1+maxIndex(q:=fracR(v,j)))=1=>1
              member?(b.1,q)                  =>1
              q:=concat(b.1,q)
              M(q) 
    reverse(sort a)

(7) -> [[i,h(i)] for i in [1/23,2/23,43/48,8/11,5/121,2020/2064,6745/7604,77/79,732/733]]
   (7)
      1   1      2   1  1      43  1 1  1      8  1 1  1  1
   [[--,[--]], [--,[--,---]], [--,[-,-,--]], [--,[-,-,--,--]],
     23  23     23  12 276     48  2 3 16     11  2 6 22 66
      5    1  1   1      505  1 1 1  1    1
    [---,[--,---,---]], [---,[-,-,-,---,----]],
     121  33 121 363     516  2 3 7 602 1204
     6745  1 1  1  1    1      1       77  1 1 1  1  1   1
    [----,[-,-,--,---,-----,------]], [--,[-,-,-,--,---,---]],
     7604  2 3 19 950 72238 570300     79  2 3 8 79 474 632
     732  1 1 1  1   1    1     1
    [---,[-,-,-,--,----,-----,-----]]]
     733  2 3 7 45 7330 20524 26388
                                                      Type: List List Any
       Time: 0.07 (IN) + 200.50 (EV) + 0.03 (OT) + 9.28 (GC) = 209.88 sec
(8) -> h(124547787/123456789456123456)
   (8)
        1             1                         1
   [---------, ---------------, ---------------------------------,
    991247326  140441667310032  613970685539400439432280360548704
                                     1
    -------------------------------------------------------------------]
    3855153765004125533560441957890277453240310786542602992016409976384
                                              Type: List Fraction Integer
                     Time: 17.73 (EV) + 0.02 (OT) + 1.08 (GC) = 18.83 sec
(9) -> h(27538/27539)
         1 1 1  1  1    1      1        1
   (9)  [-,-,-,--,---,-----,------,----------]
         2 3 7 52 225 10332 826170 1100871525
                                              Type: List Fraction Integer
                     Time: 0.02 (IN) + 28.08 (EV) + 1.28 (GC) = 29.38 sec

রেফারেন্স এবং নম্বরগুলি থেকে: http://www.maths.suryy.ac.uk/hosted-sites/R.Knott/Fferences/egyptian.html

কিছু যুক্ত করার জন্য, নিম্নতম দৈর্ঘ্যের ভগ্নাংশের সন্ধানের জন্য এটি নীচেরটি অনুকূল হবে যা সর্বাধিক ডিনোমিনেটর কম (এবং দৈর্ঘ্যের জন্য অনুকূল নয়)

L==>List FRAC INT

-- this would be the "Greedy Algorithm"
fracR(x,n)==
   y:=x;a:L:=[];c:=0;q:=denom x;q:=q^20
   for i in n.. repeat
      (c:=c+1)>1000  =>(a:=[];break)
      1/i>y          =>1
      member?(1/i,a) =>1
      a:=concat(a,1/i)
      (y:=y-1/i)=0  =>break
      numer(y)=1 and ~member?(y,a)=>(a:=concat(a,y);break)
      (i:=floor(1/y))>q           =>(a:=[];break)
   a

-- Return one List a=[1/x1,...,1/xn] with xn PI and x=r/s=reduce(+,a) or return [] for fail
Frazione2SommaReciproci(x:FRAC INT):L==
    a:L:=[]
    x>1       =>a
    numer(x)=1=>[x]
    n:=max(2,floor(1/x));xv:=m:=999;d:=denom x;zd:=divisors d;z:=copy zd; 
    w1:= if d>1.e10 then 1000 else 300; w2:= if d>1.e10 then 1000 else if d>1.e7 then 600 else if d>1.e5 then 500 else if d>1.e3 then 400 else 100;
    for i in 2..w1 repeat(mt:=(i*zd)::List PI;mv:=[yy for yy in mt|yy>=n];z:=sort(removeDuplicates(concat(z,mv)));#z>w2=>break)
    for i in z repeat
        (c:=maxIndex(b:=fracR(x,i)))=0=>1 
        c>m+1                         =>1
        if c<m or(c=m and m<999 and reduce(max,map(denom,b))<xv)then(m:=c;a:=b;xv:=reduce(max,map(denom,a)))
        v:=reduce(+,delete(b,1))
        for j in z repeat
              (c:=1+maxIndex(q:=fracR(v,j)))=1=>1
              member?(b.1,q)                  =>1
              q:=concat(b.1,q)
              if c<m or(c=m and m<999 and reduce(max,map(denom,q))<xv)then(m:=c;a:=q;xv:=reduce(max,map(denom,a)))
    reverse(sort a)

ফলাফলগুলো:

(5) -> [[i,Frazione2SommaReciproci(i)] for i in [1/23,2/23,43/48,8/11,5/121,2020/2064,6745/7604,77/79,732/733]]
   (5)
      1   1      2   1  1      43  1 1  1      8  1 1  1  1
   [[--,[--]], [--,[--,---]], [--,[-,-,--]], [--,[-,-,--,--]],
     23  23     23  12 276     48  2 3 16     11  2 6 22 66
      5    1  1   1      505  1 1 1  1    1
    [---,[--,---,---]], [---,[-,-,-,---,----]],
     121  33 121 363     516  2 3 7 602 1204
     6745  1 1  1  1    1      1       77  1 1 1  1  1   1
    [----,[-,-,--,---,-----,------]], [--,[-,-,-,--,---,---]],
     7604  2 3 19 950 72238 570300     79  2 3 8 79 474 632
     732  1 1 1  1   1    1     1
    [---,[-,-,-,--,----,-----,-----]]]
     733  2 3 7 45 7330 20524 26388
                                                      Type: List List Any
                     Time: 0.08 (IN) + 53.45 (EV) + 3.03 (GC) = 56.57 sec
(6) -> Frazione2SommaReciproci(124547787/123456789456123456)
   (6)
        1            1               1                  1
   [---------, ------------, ----------------, -------------------,
    994074172  347757767307  2764751529594496  1142210063701888512
                      1
    -------------------------------------]
    2531144929865351036156388364636113408
                                              Type: List Fraction Integer
         Time: 0.15 (IN) + 78.30 (EV) + 0.02 (OT) + 5.28 (GC) = 83.75 sec
(7) -> Frazione2SommaReciproci(27538/27539)
         1 1 1  1   1     1       1       1
   (7)  [-,-,-,--,----,-------,-------,-------]
         2 3 7 43 1935 3717765 5204871 7105062
                                              Type: List Fraction Integer
                     Time: 0.05 (IN) + 45.43 (EV) + 2.42 (GC) = 47.90 sec

দেখে মনে হচ্ছে অনেক ভাল ডিনোমিনেটরদের ইনপুট ভগ্নাংশ ডিনোমিনেটরের গুণক বিভাজন হিসাবে রয়েছে।


0

সি, 85 78 বাইট

@ সেলিংক্যাট , by 78 বাইট দ্বারা উন্নত :

n,d;main(i){for(scanf("%i%i",&n,&d);n;n*++i/d&&printf("%i ",i,d*=i,n=n*i-d));}

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


আমার আসল উত্তর, 85 বাইট:

n,d,i=1;main(){for(scanf("%i%i",&n,&d);n&&++i;n*i/d?printf("%i ",i),n=n*i-d,d*=i:0);}

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

কৃতিত্বের কিছু অংশ জোনাথন ফ্রেচের কাছে যাওয়া উচিত , যিনি এই 94 বাইট সমাধানটি লিখেছিলেন যা আমি উন্নত করেছি।


0

এপিএল (এনএআরএস), 2502 বাইট

fdn←{1∧÷⍵}⋄fnm←{1∧⍵}⋄ffl←{m←⎕ct⋄⎕ct←0⋄r←⌊⍵⋄⎕ct←m⋄r}⋄divisori←{a[⍋a←{∪×/¨{0=≢⍵:⊂⍬⋄s,(⊂1⌷⍵),¨s←∇1↓⍵}π⍵}⍵]}

r←frRF w;x;y;c;q;i;j
(x i)←w⋄i-←1⋄y←x⋄r←⍬⋄c←0⋄q←fdn x⋄q←q*20
i+←1
→4×⍳∼1000<c+←1⋄→6
j←÷i⋄→2×⍳j>y⋄→2×⍳(⊂j)∊r⋄r←r,(⊂j)⋄y←y-j⋄→0×⍳y=0⋄→5×⍳1≠fnm y⋄→5×⍳(⊂y)∊r⋄r←r,⊂y⋄→0
→2×⍳∼q<i←ffl ÷y
r←⍬

r←fr2SumF x;n;xv;m;d;zd;z;i;b;c;t;v;j;k;q;w1;w2;t;b1
z←r←⍬⋄→0×⍳1≤ffl x
:if 1=fnm x⋄r←,⊂x⋄→0⋄:endif
n←2⌈ffl÷x⋄xv←m←999⋄d←fdn x⋄zd←divisori d
w1←1000⋄w2←50⋄:if d>1.e10⋄w2←700⋄:elseif d>1.e7⋄w2←600⋄:elseif d>1.e5⋄w2←500⋄:elseif d>1.e3⋄w2←400⋄:elseif d>1.e2⋄w2←100⋄:endif
:for i :in ⍳w1⋄z←∪z∪k/⍨{⍵≥n}¨k←i×zd⋄:if w2<≢z⋄:leave⋄:endif⋄:endfor
z←∪z∪zd⋄z←z[⍋z]
:for i :in z
    :if 0=c←≢b←frRF x i ⋄:continue⋄:endif
    :if      c>m+1      ⋄:continue⋄:endif
    :if      c<m        ⋄m←c⋄r←b⋄xv←⌈/fdn¨b
    :elseif (c=m)∧(m<999)
         :if xv>t←⌈/fdn¨b⋄m←c⋄r←b⋄xv←t⋄:endif
    :endif
    :if c≤2⋄:continue⋄:endif
    v←↑+/1↓b⋄b1←(⊂↑b)
    :for j :in z
       :if 1=c←1+≢q←frRF v j⋄:continue⋄:endif
       :if        b1∊q      ⋄:continue⋄:endif
       q←b1,q
       :if  c<m⋄m←c⋄r←q     ⋄xv←⌈/fdn¨q
       :elseif (c=m)∧(m<999)
           :if xv>t←⌈/fdn¨q⋄m←c⋄r←q⋄xv←t⋄:endif
       :endif
    :endfor
:endfor
→0×⍳1≥≢r⋄r←r[⍋fdn¨r]

এই সমস্যার জন্য AXIOM কোড থেকে প্রথমবারের মতো (আমার জন্য) ভগ্নাংশ প্রকার (যা বিগেনাম ...) ব্যবহার করে এটিএক্সএল কোড থেকে ট্র্যাশলেশন।

103r233 অর্থ ভগ্নাংশ 103/233। টেস্ট:

  ⎕fmt fr2SumF 1r23
┌1────┐
│ 1r23│
└~────┘
  ⎕fmt fr2SumF 2r23
┌2──────────┐
│ 1r12 1r276│
└~──────────┘
  ⎕fmt fr2SumF 43r48
┌3────────────┐
│ 1r2 1r3 1r16│
└~────────────┘
  fr2SumF 8r11
1r2 1r6 1r22 1r66 
  fr2SumF 5r121
1r33 1r121 1r363 
  fr2SumF 2020r2064
1r2 1r3 1r7 1r602 1r1204 
  fr2SumF 6745r7604
1r2 1r3 1r19 1r950 1r72238 1r570300 
  fr2SumF 77r79
1r2 1r3 1r8 1r79 1r474 1r632 
  fr2SumF 732r733
1r2 1r3 1r7 1r45 1r7330 1r20524 1r26388 
  fr2SumF 27538r27539
1r2 1r3 1r7 1r43 1r1935 1r3717765 1r5204871 1r7105062 
  fr2SumF 124547787r123456789456123456
1r994074172 1r347757767307 1r2764751529594496 1r1142210063701888512 
  1r2531144929865351036156388364636113408 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.