একটি পূর্ণসংখ্যার সোনালীত্ব


21

একটি ধনাত্মক পূর্ণসংখ্যা n এর পূর্ণসংখ্যার দিকের আয়তক্ষেত্র হিসাবে প্রতিনিধিত্ব করা যেতে পারে a , b যেমন n = a * b । অর্থাৎ, অঞ্চলটি প্রতিনিধিত্ব করে। সাধারণভাবে, এবং b প্রদত্ত n এর জন্য স্বতন্ত্র নয় ।

যেমনটি সুপরিচিত, একটি আয়তক্ষেত্রটি বিশেষত চোখকে সন্তুষ্ট করে (বা এটি মস্তিষ্ক?) যখন তার পাশগুলি থাকে স্বর্ণের অনুপাতে থাকলে , φ = (বর্গ (5) +1) / 2 ≈ 1.6180339887 ...

এই দুটি ঘটনা মিশ্রন, এই চ্যালেঞ্জ উদ্দেশ্য একটি পূর্ণসংখ্যা পচা হয় এন দুটি পূর্ণসংখ্যার গুণফল মধ্যে একটি , যার অনুপাত সম্ভব বন্ধ হিসেবে φ (ℝ স্বাভাবিক মেট্রিক সহ)। Φ অযৌক্তিক এই বিষয়টি থেকেই বোঝা যায় যে একটি অনন্য সমাধান জুটি রয়েছে ( , )।

চ্যালেঞ্জ

ধনাত্মক পূর্ণসংখ্যা n দেওয়া হয় , আউটপুট ধনাত্মক পূর্ণসংখ্য a , b যেমন একটি * b = n এবং a / b এবং φ এর মধ্যে পরম পার্থক্য হ্রাস করা হয়।

উদাহরণস্বরূপ, বিবেচনা এন = 12. জোড়া ( একটি , ) যে সন্তুষ্ট একটি * = হয়: (1, 12), (2,6), (3,4), (4,3), ( 6,2), (12,1)। যার অনুপাত φ এর নিকটতম, সেই জুটিটি (4,3), যা 4/3 = 1.333 দেয়।

বিধি

কার্য বা প্রোগ্রাম গ্রহণযোগ্য।

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

কোডটি নির্বিচারে বৃহত সংখ্যার জন্য তত্ত্বের সাথে কাজ করা উচিত। অনুশীলনে, এটি মেমরি বা ডেটা-টাইপ সীমাবদ্ধতার দ্বারা সীমাবদ্ধ হতে পারে।

এটি তৃতীয় দশমিক বা তার চেয়ে ভাল হিসাবে যতক্ষণ না সঠিক হিসাবে ডলার এর আনুমানিক সংস্করণটি বিবেচনা করা যথেষ্ট । এটি হ'ল সত্য φ এবং আনুমানিক মানের মধ্যে পরম পার্থক্য 0.0005 এর বেশি হওয়া উচিত নয়। উদাহরণস্বরূপ, 1.618 গ্রহণযোগ্য।

একজন আনুমানিক, মূলদ সংস্করণ ব্যবহার করার সময় φ এমন একটা ছোট সম্ভাবনা যে সমাধান অনন্য নয় আছে। যে ক্ষেত্রে আপনি আউটপুট কোনো জুড়ি পারেন একটি , মাফিক কম নির্ণায়ক।

সংক্ষিপ্ততম কোড জিতেছে।

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

1        ->  1    1
2        ->  2    1 
4        ->  2    2
12       ->  4    3
42       ->  7    6
576      ->  32   18
1234     ->  2    617
10000    ->  125  80
199999   ->  1    199999
9699690  ->  3990 2431

নিশ্চয় বেশিরভাগ উত্তরগুলি some এর সাথে এক ধরণের যুক্তিযুক্ত আনুষঙ্গিক ব্যবহার করবে, আপনি যদি না গ্রহণ করেন যেমন / বিবি / এ ফলাফলের সাথে উত্তরটি যতটা সম্ভব 1 এর কাছাকাছি না থাকে।
নীল

@ নীল আমি নিশ্চিত না যে আমি আপনার মন্তব্যটি বুঝতে পেরেছি। আপনার ক্ষুদ্রতরকরণের ধারণাটি |a/b-b/a-1|প্রতিশ্রুতিবদ্ধ, যদিও তার একটি প্রমাণ প্রমাণিত হবে
লুইস মেন্ডো

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

যদি ফিবোনাচি অনুক্রমে a এবং b সংলগ্ন সংখ্যা না হয় তবে পরীক্ষায় সেগুলি সহ কোনও পয়েন্ট আছে কি?
স্ট্রবেরি

এটি বলেছিল, 1618 x 1000 ভাল প্রার্থীর মতো বলে মনে হচ্ছে (বা, রেফারেন্স দ্বারা, 809 x 500)
স্ট্রবেরি

উত্তর:


6

জেলি, 16 15 14 বাইট

@ মাইলসকে ধন্যবাদ 1 বাইট সংরক্ষিত

÷/ạØp
ÆDżṚ$ÇÞḢ

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

ব্যাখ্যা

÷/ạØp         Helper link, calculates abs(a/b - phi). Argument: [a, b]
÷/            Reduce by division to calculate a/b.
  ạØp         Calculate abs(a/b - phi).

ÆDżṚ$ÇÞḢ      Main link. Argument: n
ÆD            Get divisors of n.
  żṚ$         Pair the items of the list with those of its reverse. The reversed
              divisors of a number is the same list as the number divided by each
              of the divisors.
     ÇÞ       Sort by the output of the helper link of each pair.
       Ḣ      Get the first element [a, b] and implicitly print.

আপনি নিজেই দিয়ে বিভাজন তালিকার বিপরীতটি ইন্টারলাইভ করে একটি বাইট সংরক্ষণ করতে পারেন। ÷/ạØp¶ÆDżṚ$ÇÞḢ14 বাইট ব্যবহার করে এটি আর্গুমেন্ট হিসাবে [a, b]দেওয়া একটি তালিকা ফিরিয়ে দেয় n
মাইল

@ মাইলস দুর্দান্ত! আমি দৃশ্যত সম্পূর্ণরূপে উপর মিস /। (আমি আমার পাইথ সলিউশনে এটিই করেছি)) আমি আমার ল্যাপটপে উঠলে সম্পাদনা করব।
পূর্বকুডারী


6

মতলব, 96 81 বাইট

গল্ফযুক্ত (-15bytes), লুইস মেন্ডোকে প্রপস করে

function w(n);a=find(~(mod(n,1:n)));[~,c]=min(abs(a./(n./a)-1.618));[a(c) n/a(c)]

মূল:

function w(n)
a=find(not(mod(n,1:n)));b=abs(a./(n./a)-1.618);c=find(not(b-min(b)));[a(c) n/a(c)]

এটি এখন পর্যন্ত কোনও দুর্দান্ত সমাধান নয়, তবে কোড-গল্ফে আমার প্রথম প্রচেষ্টা। কি মজা!


2
সম্মত যে মজা! সাইটে স্বাগতম!
ডিজেএমসিএমহেম

1
আপনি প্রতিস্থাপন করতে পারেন notদ্বারা ~ কয়েক বাইট সংরক্ষণ করুন। এছাড়াও, আপনার দ্বিতীয় আউটপুট ব্যবহার করে minপরিত্রাণ পেতে পারেন find:a=find(~(mod(n,1:n)));[~,c]=min(abs(a./(n./a)-1.618));[a(c) n/a(c)]
লুইস মেন্ডো

ভাল দাগযুক্ত - এটি বেশ কিছু চিহ্ন সরিয়ে দেয়!
ptev

1
আপনি এটির n=input('');পরিবর্তে আরও ছোট করে তুলতে পারেন function w(n);তারপরে আপনার ()চারপাশের একটি অতিরিক্ত জুড়ি রয়েছে mod
flawr


5

গণিত, 51 বাইট

#&@@SortBy[{x=Divisors@#,#/x},Abs[#/#2-1.618]&]&

(পক্ষান্তরণ জন্য ম্যাথামেটিকাল এর পোস্টসাফিক্স অপারেটর একটি সুপারস্ক্রিপ্ট হিসেবে প্রদর্শিত হয়T ম্যাথামেটিকাল মধ্যে)।

ম্যাথমেটিকার একটি অন্তর্নির্মিত রয়েছে GoldenRatioতবে 1.618 অনেক খাটো, বিশেষত পূর্বেরটির জন্যও এটি প্রয়োজন N@


5

পাইথ, 21 20 18 বাইট

hoacFN.n3C_Bf!%QTS

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.

ব্যাখ্যা

  1. S1 থেকে ইনপুট পর্যন্ত ইনক্লু আইভ রেঞ্জ পান ।
  2. fইনপুট ভাগ করে নেওয়ার জন্য সংখ্যার জন্য ইল্টার !%QT
  3. পাওয়া [that list, that list reversed] _B । একটি সংখ্যার বিপরীত বিভাজক প্রতিটি বিভাজক দ্বারা বিভাজক সংখ্যা হিসাবে একই তালিকা।
  4. এর জোড়া পেতে তালিকাটি স্থানান্তর করুন [numerator, denominator]
  5. এস oদ্বারা জোড়া RT aযুগল অনুপাত এর bsolute পার্থক্য cFNসোনার অনুপাত .n3
  6. প্রথম (সর্বনিম্ন) জুটি পান hএবং মুদ্রণ করুন।

5

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

n=>{for(b=0,k=n/.809;n%++b||k>b*b*2&&(a=b););return[b=k-a*a>b*b?b:a,n/b]}

আমরা সন্ধান করি:

  • a = n এর সর্বোচ্চ বিভাজক যার জন্য </ φ> এ² ²
  • b = n এর সর্বনিম্ন বিভাজক যার জন্য n / φ <b² ²

তারপরে, সমাধানটি হয় [ক, এন / এ] বা [খ, এন / বি] । আমরা তুলনা করি n / φ - a² কে b² - n / φকোন এক্সপ্রেশনটি শূন্যের নিকটে রয়েছে তা খুঁজে পেতে ।

কোডটিতে ব্যবহৃত প্রকৃত সূত্রটি prec / 2 এর উপর ভিত্তি করে যা একই নির্ভুলতার সাথে than এর চেয়ে কম আকারে লেখা যেতে পারে: .809 বনাম 1.618

অতএব:

n / φ> a² ⇔ n / (φ / 2)> 2a² ²

এবং:

n / φ - a²> বিউ - এন / φ ⇔ 2 এন / φ - এ²> বিএন / (φ / 2) - এ> বিও

জটিলতা

পুনরাবৃত্তির সংখ্যাটি n এর কারণগুলির সংখ্যার উপর নির্ভর করে। সবচেয়ে খারাপ ক্ষেত্রে ঘটে যখন এন প্রধান হয়, কারণ এর কেবলমাত্র 2 টি বিভাজন খুঁজতে আমাদের 1 থেকে n পর্যন্ত সমস্ত পুনরাবৃত্তি করতে হয়। ১৯৯৯৯৯-এ এটিই ঘটে the অন্যদিকে, 9699690 19-মসৃণ এবং আমরা দ্রুত ব্রেকিং পয়েন্ট either (n / φ) ≈ 2448 এর দুপাশে দুটি বিভাজক খুঁজে পাই।

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

let f =
n=>{for(b=0,k=n/.809;n%++b||k>b*b*2&&(a=b););return[b=k-a*a>b*b?b:a,n/b]}

console.log(JSON.stringify(f(12)));       // [ 3, 4 ]
console.log(JSON.stringify(f(42)));       // [ 6, 7 ]
console.log(JSON.stringify(f(576)));      // [ 18, 32 ]
console.log(JSON.stringify(f(1234)));     // [ 2, 617 ]
console.log(JSON.stringify(f(10000)));    // [ 80, 125 ]
console.log(JSON.stringify(f(199999)));   // [ 1, 199999 ]
console.log(JSON.stringify(f(9699690)));  // [ 2431, 3990 ]


4

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

f=
n=>{p=r=>Math.abs(r/n-n/r-1);for(r=i=n;--i;)r=n%i||p(i*i)>p(r*r)?r:i;return[r,n/r]}
;
<input type=number min=1 oninput=[a.value,b.value]=f(+this.value)><input readonly id=a><input readonly id=b>

প্রকৃতপক্ষে ( , ) জুটি দেয় যা একটি / বি - বি / -১ এর পরম মানকে হ্রাস করে , তবে এটি কমপক্ষে সমস্ত পরীক্ষার ক্ষেত্রে কাজ করে, যদিও আমি অনুমান করি যে পরিবর্তে ১. instead১6 পরীক্ষার সাহায্যে আমি 4 বাইট সংরক্ষণ করতে পারি ।


3

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

:1fL:2a:Lzoht
,A:B#>.*?!,.=
:3a/:$A-$|
//

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

ব্যাখ্যা

  • প্রধান শিকারী:

    :1fL           L is the list of all couples [A:B] such that A*B = Input (see Pred. 1)
        :2a        Compute the distance between all As/Bs and φ (see Pred. 2)
           :Lz     Zip those distances to L
              o    Sort the zip on the distances
               ht  Take the couple [A:B] of the first element of the sorted list
    
  • সম্পৃক্ত 1: আউটপুট দুয়েক হল [A:B]যেমন যেA*B = Input

    ,A:B           The list [A:B]
        #>         Both A and B are strictly positive
          .        Output = [A:B]
           *?      A*B = Input
             !,    Discard other choice points
               .=  Assign a value to A and B that satisfy the constraints
    
  • ভবিষ্যদ্বাণী 2: A/Bএবং φ এর মধ্যে দূরত্ব গণনা করুন φ

    :3a            Convert A and B to floats
       /           Divide A by B
        :$A-       Subtract φ
            $|     Absolute value
    
  • ভবিষ্যদ্বাণী 3: একটি ভাসমানকে এর বিপরীতমুখী রূপান্তর করে কোনও ফ্লোটে রূপান্তর করুন

    /              1/Input
     /             Output = 1/(1/Input)
    

কৌতূহলের বাইরে: φব্র্যাচলগে একটি পূর্বনির্ধারিত আক্ষরিক? বা কোডে এটি সংজ্ঞায়িত কোথায়?
লুইস মেন্ডো

1
ওহ, আমি সবেমাত্র দেখেছি:$A
লুইস মেন্ডো

2
@ লুইস মেন্ডো এর Aজন্য Au;)
মারাত্মক রূপ দিন

আঃ, খুব সুন্দর!
লুইস মেন্ডো

2

হাস্কেল (ল্যাম্বডাবোট), 86 বাইট

f(x,y)=abs$(x/y)-1.618
q n=minimumBy((.f).compare.f)[(x,y)|x<-[1..n],y<-[1..n],x*y==n]

2

পিএইচপি, 103 বাইট

<?php for($s=$a=$argv[1];++$i<$a;)if($a%$i==0&&$s>$t=abs($i*$i/$a-1.618)){$n=$i;$s=$t;}echo"$n ".$a/$n;

নিযুক্ত স্বাক্ষরিত সম্পর্কে একটি নোটিশ উত্পন্ন করে (এটি কার্যকর করতে বাধা দেয় না) $ i সুতরাং এমন পরিবেশে চালানো উচিত যা নোটিশকে স্থির করে দেয়।


পিএইচপি ওপেন ট্যাগ গণনা করার প্রয়োজন নেই যখন কোডটি php -r '…'(যেখানে -rবিনামূল্যে) চালানো যেতে পারে । এবং অবশ্যই অবশ্যই দীর্ঘ ফর্মের কোনও প্রয়োজন নেই, যেমনটি short_open_tagডিফল্ট হিসাবে রয়েছে।
manatwork

যতদূর আমি জানি $ আরগভি -r এর সাথে কাজ করে না তাই এটি আর যাইহোক এটি চালানো যায় না। এটি বলেছে যে আপনি উইন্ডোতে থাকলে এবং ট্যাগ ছাড়াই চলতে থাকলে পঠন () বা fgets (STDIN) এ পরিবর্তন করা সম্ভবত যেভাবেই ছোট হয়।
ব্যবহারকারী59178

-rএবং $argvএকসাথে ভাল কাজ করছে: পেস্টবিন.
com

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

আপনি এখনও প্রতিস্থাপন করতে পারেন <?phpসঙ্গে <?সংরক্ষণ তিন বাইট।
পল স্মিটজ

1

পাইথন 3, 96 বাইট

খুব সহজ সমাধান। এই এসও উত্তরটি ব্যবহার করে ।

lambda n:min([((i,n//i),abs(1.618-i/(n//i)))for i in range(1,n+1)if n%i<1],key=lambda x:x[1])[0]

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

পাইথন 2 এ একই সমাধানটি একটি বাইট দীর্ঘ।

lambda n:min([((i,n/i),abs(1.618-1.*i/(n/i)))for i in range(1,n+1)if n%i<1],key=lambda x:x[1])[0]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.