ম্যাক্সমিন ডিভাইডার পেয়ারের পার্থক্য (ডিএমডিপি)


18

বিভাজনকারীদের নিয়ে কথা বলি ...

নিখুঁত স্কোয়ারগুলি রেখে (এক মুহুর্তের জন্য) সমস্ত ধনাত্মক পূর্ণসংখ্যাগুলি তাদের 2 বিভক্তির পণ্য হিসাবে প্রকাশ করা যেতে পারে । এর জন্য দ্রুত উদাহরণ 126: এখানে সমস্ত বিভাজন রয়েছে126
এখানে চিত্র বর্ণনা লিখুন

আপনি দেখতে পাবেন যে সমস্ত বিভাজক জোড় করা যায়। এখানে আমরা ডিভাইডার জুটি বলব :
[1, 126], [2, 63], [3, 42], [6, 21], [7, 18], [9, 14]

এই চ্যালেঞ্জের জন্য আমাদের কেবল এই তালিকার শেষ জোড়া দরকার (যা ছবির কেন্দ্রীয় জুটি ):
[9,14]আমরা এই জোড়টিকে ম্যাক্সমিন ডিভায়জার পেয়ার বলবMaxMin গুণনীয়ক জুড়ি পার্থক্য (DMDP) যুগল যা দুই উপাদানের পার্থক্য নেই জন্য আরও একটি উদাহরণ । বিভাজনকারীরা হলেন:
[9,14]=5
544

[1, 2, 4, 8, 16, 17, 32 , 34, 68, 136, 272, 544]

এবং ডিএমডিপি (544) = 15 কারণ32-17=15

নিখুঁত স্কোয়ারের কী হবে ? সমস্ত নিখুঁত স্কোয়ারের ডিএমডিপি = 0 রয়েছে
উদাহরণস্বরূপ 64বিভাজকগুলির সাথে নেওয়া যাক

{1, 2, 4, 8 , 16, 32, 64}

আপনি এই ক্ষেত্রে দেখতে পাচ্ছি MaxMin গুণনীয়ক জুড়ি নেই [8,8]যা আছে DMDP=0
আমরা প্রায় সম্পন্ন করে ফেলেছেন ..

চ্যালেঞ্জ

একটি পূর্ণসংখ্যা দেওয়া হয়েছে n>0, আউটপুটটির কতগুলি কম বা তার সমান কম সংখ্যক10000 , DMDP এর চেয়ে কম থাকে have n

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

ইনপুট -> আউটপুট

1->100 (those are all the perfect squares)
5->492  
13->1201
369->6175  
777->7264  
2000->8478  
5000->9440  
9000->9888  
10000->10000   
20000->10000

এই বাইটে .Shortest উত্তর জয়ী


এটি কি 10000দ্বিতীয়, ভেরিয়েবল, ইনপুট হিসাবে থাকা আরও অর্থবোধ করে না ?
জোনাথন অ্যালান

1
হ্যাঁ, আমি এটি সম্পর্কে ভেবেছিলাম তবে এটি চ্যালেঞ্জের কোনও কিছুই যুক্ত করবে না। এইভাবে আমি মনে করি প্রত্যেকের পক্ষে চ্যালেঞ্জটি বোঝা সহজ।

উত্তর:


5

জাভাস্ক্রিপ্ট (ES7), 60 বাইট

f=(n,i=1e4,j=i**.5|0)=>i?i%j?f(n,i,j-1):(i/j-j<n)+f(n,i-1):0

সম্ভবত আপনার পুনরাবৃত্তি সীমা অতিক্রম করেছে, তাই আপনি 70 বাইটের জন্য পুনরাবৃত্তি সংস্করণ পছন্দ করতে পারেন:

n=>[...Array(1e4)].map(g=(j=++i**.5|0)=>i%j?g(j-1):k+=i/j-j<n,i=k=0)|k

4

জেলি , 13 বাইট

1 বাইট জোনাথন অ্যালানকে ধন্যবাদ।

ȷ4RÆDạU$Ṃ€<⁸S

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


ÆDạ"Ṛ$Ṃআপনি যদি একটি বাইট ওভার সংরক্ষণ ÆDạ:@¥⁸Ṃ(আমি ছিল ạ"ṚṂ... ȷ4RÆDÇ€<⁸S15 জন্য - খুব অনুরূপ - সম্পাদনা: হুম অথবা এটি কোন ছিল :জড়িত ... আপনি কি মনে করেন?)
জোনাথন অ্যালান


কি শান্তি. না আপনি এটির জন্য যান, আমি আপনাকে একটি বাইট সংরক্ষণ করি যা অন্য 2 টি সংরক্ষণ করে!
জোনাথন অ্যালান

আপনি একটি ব্যাখ্যা যোগ করতে পারেন?
কেভিন ক্রুইজসেন

4

জাভা 8, 151 111 110 101 বাইট

n->{int r=0,x=10000,i;for(;x-->0;r-=i-n>>-1)for(i=x;i-->1;)if(x>=i*i&x%i<1){i=x/i-i;break;}return r;}

-10 বাইট @ নেভায়ে ধন্যবাদ ।

ব্যাখ্যা:

এখানে চেষ্টা করুন।

n->{               // Method with integer as parameter and return-type
  int r=0,         //  Result-integer
      x=10000,     //  Index-integer starting at 10,000
      i;           //  Another index-integer for the inner loop
  for(;x-->0;      //  Loop (1) from 10,000 down to 0
      r-=i-n>>-1)  //   If the MaxMin-Divisor Pair's difference is lower than the input,
                   //    add 1 to the result (after every iteration)
    for(i=x,       //   Set `i` to `x`
        i-->1;)    //   Inner loop (2) from `i` downwards to 1
      if(x>=i*i    //    If the current square-root of `x` is smaller than or equal to `i`,
         &x%i<1){  //    and if the current `x` is divisible by `i`:
        i=x/i-i;   //     Calculate the MaxMin-Division difference
        break;}    //     And leave the inner loop (2)
                   //   End of inner loop (2) (implicit / single-line body)
                   //  End of loop (1) (implicit / single-line body)
  return r;        //  Return the result
}                  // End of method

1
আপনি for(i=1,i+=Math.sqrt(x);--i>0;)if(...1 বাইট সংরক্ষণ করতে ব্যবহার করতে পারেন ।
নেভায়ে

নিজে চেষ্টা করার সময় নেই, তবে এক্স থেকে শুরু করে অভ্যন্তরীণ লুপটি কমিয়ে দেওয়া এবং বর্তমান সর্বনিম্নের জন্য একটি অতিরিক্ত পরিবর্তনশীল থাকা কি আরও কম হবে?
জলি জোকার

1
101 বাইট:n->{int r=0,x=10000,i;for(;x-->0;r-=i-n>>-1)for(i=x;i-->1;)if(x>=i*i&x%i<1){i=x/i-i;break;}return r;}
নেভে

@ নেভায়ে আবারও ধন্যবাদ, x>=i*iব্যবহারের বিকল্প হিসাবে সত্যিই মনে রাখা দরকার Math.sqrt, যেহেতু এটি আমার কোডে আপনি দ্বিতীয়বার গল্ফ করেছিলেন।
কেভিন ক্রুইজসেন

2

আর , 73 77 বাইট

4 বাইটের জন্য গুয়াস্প্পিকে ধন্যবাদ

sum(sapply(1:1e4,function(x)min(abs((w=which(x%%1:x<1))-rev(w))))<scan())

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

ডিএমডিপি গণনা করার জন্য ভেক্টরাইজ ফাংশনটি হারিয়ে ফেলেছেন এবং এখন ফাংশনটির উপরে একটি নীল ব্যবহার করছেন। আইটেমগুলির জন্য সত্য যা ইনপুটটির চেয়ে কম হয় ফলাফলের জন্য সংক্ষিপ্ত করা হয়।


আহ, আমি লক্ষ্য করি না যে ডিএমডিপিটি সেই ফ্যাক্টর তালিকার ন্যূনতম পার্থক্য! খুব সুন্দর. আমার মনে sum(sapply(1:1e4,function(x)min(abs((w=which(x%%1:x<1))-rev(w))))<scan())হয় কিছুটা খাটো
জিউসেপ

2

গণিত, 64 বাইট

Count[Divisors~Array~1*^4,a_/;#+a[[i=⌈Tr[1^a]/2⌉]]>a[[-i]]]&

ওল্ফ্রাম স্যান্ডবক্সে এটি ব্যবহার করে দেখুন

ব্যবহার

f = Count[Divisors~Array~1*^4,a_/;#+a[[i=⌈Tr[1^a]/2⌉]]>a[[-i]]]&

 

f[1]
100
f /@ {1, 5, 13, 369, 777, 2000, 5000, 9000, 10000, 20000}
{100, 492, 1201, 6175, 7264, 8478, 9440, 9888, 10000, 10000}

ব্যাখ্যা

Divisors~Array~1*^4

ভাজক তালিকা থেকে জেনারেট করুন 1থেকে 10000। (বিভাজনকারীদের তালিকা স্বয়ংক্রিয়ভাবে বাছাই করা হয়)

Count[ ..., a_/; ... ]

উপাদানগুলির উপস্থিতিগুলি গণনা করুন a, যেমন ...

#+a[[i=⌈Tr[1^a]/2⌉]]>a[[-i]]]

(input) + (left one of the middle element(s)) > (right one of the middle element(s)) যদি কেবলমাত্র একটি মাঝারি উপাদান থাকে তবে বাম = ডান।



1

এমএটিএল , 20 বাইট

1e4:"@Z\2Y"dJ2/)G<vs

টিআইও-তে কোড টাইম আউট। এখানে অফলাইনের সংকলকটির সাথে চালিত একটি উদাহরণ রয়েছে:

>> matl 1e4:"@Z\2Y"dJ2/)G<vs
> 13
1201

1

আর , 91 বাইট

function(n)sum(sapply(1:1e4,function(x,d=(1:x)[x%%1:x<1])diff(d[median(seq(d))+.5*0:1]))<n)

অ্যারের ইনডেক্সিং ব্যবহার করে এবং এটি গণনা করার জন্য মিকিটির সমাধানের চেয়ে ডিএমডিপি গণনা করার জন্য একটি পৃথক (আরও খারাপ) পদ্ধতির diffপ্রয়োজন। হায়রে।

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


1

গণিত, 119 115 বাইট tes

(n=#;Tr[1^Select[Last@#-First@#&/@(Take[Divisors@#,Round[{-.1,.1}+(1+Length@Divisors@#)/2]]&/@Range@10000),#<n&]])&

অবশেষে আমি এই জিনিসটি কাজ করেছিলাম এবং আমি গত আধা ঘন্টা ধরে চেষ্টা করছি। ._।

উদাহরণ রান

আপনার জন্য কোন বিবরণ!


Casesহয় 4খাটো বাইট: Tr[1^Cases[Last@#-First@#&/@(Take[Divisors@#,Round[{-.1,.1}+(1+Length@Divisors@#)/2]]&/@Range@10000),n_/;n<#]]&এই টিপ দেখুন ।
নেজেনিসিস

1
@ এনজেনিসিস আসলে Countতুলনায় আরও খাটো CasesCount[Last@#-First@#&/@(Take[Divisors@#,Round[{-.1,.1}+‌​(1+Length@Divisors@#‌​)/2]]&/@Range@10000)‌​,n_/;n<#]&
জংহওয়ান মিনি

এছাড়াও, 10^4বা এর 1*^4চেয়ে ছোট 10000, এবং /@Range@এর সমতুল্য ~Array~
জংহওয়ান মিন

1

গণিত, 78 বাইট

(s=#;Tr[1^Select[Table[#2-#&@@Quantile[Divisors@i,{.5,.51}],{i,10^4}],#<s&]])&

Casesহয় 4খাটো বাইট: Tr[1^Cases[Table[#2-#&@@Quantile[Divisors@i,{.5,.51}],{i,10^4}],s_/;s<#]]&এই টিপ দেখুন ।
নেজেনিসিস

1
@ এনজেনিসিসটি Countআরও খাটো:Count[Table[#2-#&@@Quantile[Divisors@i,{.5,.51}],{i,10^‌​4}],s_/;s<#]&
জংহওয়ান মিন

1

হুশ , 19 বাইট

#ȯV<⁰Sz≠↔§f`¦ḣḣ□100

টিআইও লিঙ্ক নেই, যেহেতু এটি শেষ হয়ে গেছে। এই সংস্করণটি 10000 এর জায়গায় 100 ব্যবহার করে এবং কয়েক সেকেন্ডে শেষ হয়।

ব্যাখ্যা

কৃত্রিম স্বীকৃতি দেওয়ার জন্য হুসের কোনও অন্তর্নির্মিত বা সমর্থন নেই।

#ȯV<⁰Sz≠↔§f`¦ḣḣ□100  Input is n (accessed with ⁰).
               □100  Square of 100: 10000
              ḣ      Inclusive range from 1.
#                    Count number of elements for which
 ȯ                   this composition of 3 functions gives truthy result:
                       Argument k, say k = 12.
         §f`¦ḣ         Divisors of k:
             ḣ           Range: [1,2,3,..,12]
         §f              Filter by
           `¦            divides k: [1,2,3,4,6,12]
     Sz≠↔              Absolute differences of divisor pairs:
        ↔                Reverse: [12,6,4,3,2,1]
     Sz                  Zip with divisor list
       ≠                 using absolute difference: [11,4,1,1,4,11]
  V<⁰                  Is any of these less than n?

1

জাপট , 25 19 17 বাইট

L²õÈâ ®aX/ZÃd<UÃè

এটা পরীক্ষা করো


ব্যাখ্যা

পূর্ণসংখ্যার অন্তর্নিহিত ইনপুট U

L²õ

õ1 থেকে 100 ( L) স্কোয়ার পর্যন্ত পূর্ণসংখ্যার অ্যারে তৈরি করুন ( )।

Èâ          Ã

প্রত্যেকটি একটি ফাংশন ( Xবর্তমান উপাদানটি কোথায় ) এর মধ্য দিয়ে পাস করুন যা এর বিভাজকগুলির একটি অ্যারে তৈরি করে ( â) X

®    Ã

বিভাজকের সেই অ্যারের উপরে মানচিত্র, যেখানে Zবর্তমান উপাদান রয়েছে।

aX/Z

এর সম্পূর্ণ পার্থক্য ( a) পানZ এবং Xভাগ করে নিন Z

d<U

উপাদানগুলির মধ্যে কোনও (dফলাফলের অ্যারেতে ) কি কম U?

è

সত্যবাদী উপাদান গণনা করুন এবং ফলকে সুস্পষ্টভাবে ফলাফল আউটপুট করুন।



1

টিআই-বেসিক, 46 বাইট

নোট করুন যে টিআই-বেসিক একটি টোকেনাইজড ভাষা। এছাড়াও, 2 লাইনের E হ'ল একটি ছোট মূলধন E, 2ND +, টিপে সন্ধান করে।

Input A
DelVar DFor(B,1,E4
For(C,1,√(B
If not(fPart(B/C
B/C-C<A
End
D+Ans→D
End

প্রোগ্রামটি কার্যকর হওয়ার পরপরই ফলাফল ডি এবং উত্তরগুলিতে হবে। যদি এটি প্রদর্শিত হয়, আরও দুটি বাইট যোগ (নিউলাইন এবং Ans) যথেষ্ট হবে।


0

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

lambda i:len(filter(lambda n:n<i,[reduce(lambda x,y:y-x,[[x,n/x]for x in range(1,int(n**.5+1))if n%x<1][-1])for n in range(1,10001)]))

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

ইও ... আরও ভাল করার দরকার আছে ।


125 বাইট (-9 বাইটস) আপনার বর্তমান পদ্ধতির ব্যবহার করে, কিন্তু প্রতিস্থাপন len(filter(lambda n:n<i,...))সঙ্গেsum(n<i for n in ....)
জনাব Xcoder

মিঃ এক্সকোডার'র মন্তব্যের ভিত্তিতে 114 বাইট
ovs

ওভসের মন্তব্যের ভিত্তিতে 113 বাইট tes
মিঃ এক্সকডার



0

VB.NET (.NET 4.5) 116 115 বাইট

Function A(n)
For i=1To 10^4
Dim s As Byte=Math.Sqrt(i)
While i Mod s>0
s-=1
End While
A-=i/s-s<n
Next
End Function

ব্যাখ্যা:

একটি ফাংশন যা nপ্যারামিটার হিসাবে নেয় এবং ফলাফলটি দেয়।

বর্গমূল থেকে শুরু হয় এবং নিকটতম পূর্ণসংখ্যার সন্ধান করে যা সমানভাবে বিভক্ত হয় (এর চেয়ে ছোট হবে MaxMin Divisor Pair)। তারপরে জোড়াটি বৃহত্তর হয় ( i/s), পার্থক্যটি সন্ধান করে এবং ইনপুটটির সাথে তুলনা করে।


গল্ফিং কৌশল ব্যবহৃত:

  • Dim ব্যয়বহুল, তাই কম ভেরিয়েবল আমি আরও ভাল ঘোষণা।
  • আমি বর্গমূলের দিকে অনুসন্ধান শুরু করি, তবে কেবল পূর্ণসংখ্যাগুলি দেখতে চাই। ঘোষণা দিয়েsঅবিচ্ছেদ্য ধরণের হিসাবে , এটি আমার জন্য মেঝেতে ঝাঁপিয়ে পড়ে।
  • ভিবি ব্যয়কারী ^হিসাবে ব্যবহার করে । সুতরাং 100005 অক্ষর, 10^4শুধুমাত্র 4 হয়।
  • ভিবি একই নাম এবং ফাংশন সংজ্ঞা হিসাবে টাইপ করে একটি স্বয়ংক্রিয় পরিবর্তনশীল তৈরি করে (আমার ক্ষেত্রে এ)। ফাংশন শেষে, যদি না থাকে তবে returnপরিবর্তে ফাংশন ভেরিয়েবলের মান ফিরে আসবে। সুতরাং আমি পৃথক ভেরিয়েবল ঘোষণা না করে এবং কোনও বিবরণী বিবৃতি ব্যবহার না করে অক্ষরগুলি সংরক্ষণ করি।
  • ভিবিতে টাইপিং / কাস্টিং খুব ক্ষমাযোগ্য। iধরে নেওয়া হয় Integerকারণ আমি একটি পূর্ণসংখ্যাকে আক্ষরিক অর্পণ করেছি। Aধরে নেওয়া হয় Objectতবে আমি কোনও পূর্ণসংখ্যার যোগ করার সাথে সাথে এটি একটির মতো আচরণ করে Integer
  • ifপার্থক্যটি সন্তোষজনক কিনা তা যাচাই করার পরিবর্তে , এটি একটি পূর্ণসংখ্যায় বুলিয়ান কাস্ট করে ফলাফলের সাথে সরাসরি যুক্ত করুন। তবে, ভিবি ব্যবহার -1করেTrue , তাই সঠিক চিহ্নটি পেতে বিয়োগ করুন।
  • প্রযুক্তিগতভাবে, আমরা হতে চাই Modনা 0। ভিবি.এনইটি-তে নেতিবাচক সংখ্যার মডুলাস গ্রহণ করা নেতিবাচক ফলাফল দেবে। তবে, সবকিছু ইতিবাচক তাই আমি পরিণত <>করে বাইট বাঁচাতে পারি >
  • যাচাই করুন বৃহত্তম সংখ্যা 10000. যে বর্গমূল 100 হয় তাই আমি শুধুমাত্র একটি প্রয়োজন Byteএকটি সংক্ষিপ্ত নামে টাইপ ব্যবহার করে ঘোষণায় বাইট সংরক্ষণ, যে সঞ্চয় করতে।

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


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