সঠিক বিভাজক ম্যাশ-আপ


20

একটি সঠিক ভাজক একটি হল ভাজক একটি সংখ্যা এন , যা নয় এন নিজেই। উদাহরণস্বরূপ, 12 এর সঠিক বিভাজনগুলি হ'ল 1, 2, 3, 4 এবং 6 6

আপনাকে x , x ≥ 2, x ≤ 1000 প্রদান করে একটি পূর্ণসংখ্যা দেওয়া হবে । আপনার কাজটি হ'ল 2 থেকে x (সমেত) ( ওইআইএস এ 280050 ) এর পূর্ণসংখ্যার সমস্ত সর্বোচ্চ উপযুক্ত বিভাজকের যোগফল ।

উদাহরণ (সহ x = 6):

  • 2 এবং 6 (সমেত) এর মধ্যে সমস্ত পূর্ণসংখ্যার সন্ধান করুন: 2,3,4,5,6।

  • এগুলির সকলের যথাযথ বিভাজন পান এবং প্রতিটি সংখ্যা থেকে সর্বোচ্চটি বেছে নিন:

    • 2 -> 1
    • 3 -> 1
    • 4 -> 1, 2
    • 5 -> 1
    • 6 -> 1, 2, 3
  • সারাংশ সর্বোচ্চ সঠিক ভাজক: 1 + 1 + 2 + 1 + 3 = 8

  • চূড়ান্ত ফলাফল 8।

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

ইনপুট | আউটপুট
------- + + ---------
       |
 2 | 1
 4 | 4
 6 | 8
 8 | 13
 15 | 41
 37 | 229
 100 | 1690
 1000 | 165279

বিধি



5
যদি আপনি কোনও কিছুতে স্যান্ডবক্সে চলে যান তবে এটি সেখানে দুই ঘণ্টারও বেশি সময় রেখে দিন।
পিটার টেলর

@ পিটারটেলর আমি পোস্টটি স্যান্ডবক্স করেছি কেবল প্রতিক্রিয়া জানাতে, কারণ এটি একটি খুব সহজ চ্যালেঞ্জ যা আমি সাধারণত স্যান্ডবক্সে পোস্ট করি না। বিটিডব্লিউ সম্পাদনার জন্য ধন্যবাদ।
মিঃ এক্সকোডার

উত্তর:



5

কাস্তে , 7 বাইট

ṁȯΠtptḣ

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

ব্যাখ্যা

সরাসরি বিভক্তকারীদের সরাসরি (এখনও) গণনা করার জন্য হুসের কোনও অন্তর্নির্মিত ব্যবস্থা নেই, তাই আমি পরিবর্তে প্রাইম ফ্যাক্টরাইজেশন ব্যবহার করছি। একটি সংখ্যার বৃহত্তম সঠিক বিভাজক হ'ল ক্ষুদ্রতম ব্যতীত তার প্রধান কারণগুলির গুণফল। আমি এই ফাংশনটি 2 থেকে ইনপুট পর্যন্ত পরিসরে ম্যাপ করি এবং ফলাফলগুলি যোগ করি।

ṁȯΠtptḣ  Define a function:
      ḣ  Range from 1 to input.
     t   Remove the first element (range from 2).
ṁ        Map over the list and take sum:
 ȯ        The composition of
    p     prime factorization,
   t      tail (remove smallest prime) and
  Π       product.

5

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

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

এটি ধীর এবং টিআইও-তে ইনপুট 15 সহ্য করতে পারে না ।

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

তবে, সমস্ত পরীক্ষার কেস যাচাই করতে মেমোইজেশন ( ধন্যবাদ @ মিউজিকম্যান523 ) ব্যবহার করা যেতে পারে।

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

বিকল্প সংস্করণ, 52 বাইট

2 বাইট খরচ এ, আমরা গনা কিনা নির্বাচন করতে পারবেন f(n,k+1)বা n/k+f(n-1)

f=lambda n,k=2:n>1and(n%k and f(n,k+1)or n/k+f(n-1))

কিছু ছলনার সাথে, এটি সমস্ত পরীক্ষার ক্ষেত্রে এমনকি টিআইওতেও কাজ করে।

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


যেহেতু fএকটি হল বিশুদ্ধ ফাংশন , আপনি এটি বৃহত্তর ক্ষেত্রে চালানোর জন্য memoize করতে Tio
musicman523

ঠিক আছে, কোনও ডেকরেটার ব্যবহার করতে সক্ষম না হওয়ায় আমাকে তাড়িয়ে দিল। ধন্যবাদ!
ডেনিস



4

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

f=(n,i=2)=>n<2?0:n%i?f(n,i+1):n/i+f(n-1)
<input type=number oninput=o.textContent=f(this.value)><pre id=o>

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


স্ট্যাক ওভারফ্লোস n>352(কমপক্ষে এই স্নিপেটে, এটি আমার ব্রাউজার / মেশিন নির্ভরতা কিনা তা জানেন না) যখন আপনি কমপক্ষে অবধি সমর্থন করবেন বলে মনে করা হচ্ছে n=1000
অফিসিয়ালাইম

@officialaimm এটা জন্য কাজ করে n=1000যদি আপনি যেমন ব্যবহার node --stack_size=8000
নিল

4

05 এ বি 1 ই , 9 8 বাইট

-1 বাইট ধন্যবাদ তার পাইথ উত্তরে লিকি নুনের প্রধান ফ্যাক্টর ট্রিককে

L¦vyÒ¦PO

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

ব্যাখ্যা

L¦vyÒ¦PO
L¦       # Range [2 .. input]
  vy     # For each...
    Ò¦    # All prime factors except the first one
      P   # Product
       O  # Sum with previous results
         # Implicit print

বিকল্প 8 বাইট সমাধান (এটি টিআইওতে কাজ করে না)

L¦vyѨθO    

এবং ofc বিকল্প 9 বাইট সমাধান (এটি টিআইওতে কাজ করে)

L¦vyѨ®èO    

4

রেটিনা , 31 24 বাইট

মার্টিন ইন্ডারকে 7 বাইট ধন্যবাদ

.+
$*
M!&`(1+)(?=\1+$)
1

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

কিভাবে এটা কাজ করে

রেজেক্স অ্যানারিতে /^(1+)\1+$/প্রতিনিধিত্ব করা একটি নির্দিষ্ট সংখ্যার বৃহত্তম যথাযথ বিভাজককে ক্যাপচার করে। কোডে, \1+এটিকে লুকোয়াস সিনট্যাক্সে পরিণত করা হয়েছে।




4

পাইথন 2 (পাইপাই) , 73 71 70 বাইট

n=input();r=[0]*n;d=1
while n:n-=1;r[d+d::d]=n/d*[d];d+=1
print sum(r)

সংক্ষিপ্ত পাইথন উত্তর নয়, তবে এটি কেবল পরীক্ষার ক্ষেত্রে বাতাস বইছে। টিআইও ঘাম না ভেঙে 30,000,000 অবধি ইনপুটগুলি পরিচালনা করে ; আমার ডেস্কটপ কম্পিউটার 300,000,000 পরিচালনা করে এক মিনিটে ।

2 বাইট ব্যয়ে , শর্তটি n>d10 ডলার গতি বাড়ানোর জন্য ব্যবহার করা যেতে পারে।

ধারণাটির জন্য @ এক্সনোরকে ধন্যবাদ r=[0]*n, যা 3 বাইট সংরক্ষণ করেছে!

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


মজার, আমি ঠিক একই কোডটি লিখেছিলাম ।
xnor

l=[0]*nআপনি পরিত্রাণ পেতে অনুমতি দেওয়া উচিত -2execকিন্ডা গতিটি মেরে ফেলে, তবে একটি whileলুপ আমার পদ্ধতির চেয়েও কম হবে।
ডেনিস

এটি আমার পদ্ধতির তুলনায় সামান্য দ্রুত বলে মনে হচ্ছে। মনে মনে যদি আমি আমার উত্তরে এটি সম্পাদনা করি?
ডেনিস

দয়া করে, এটি জন্য যান
xnor

1
@ মিঃ এক্সকোডার পিপাই-তে নেই, তবে হ্যাঁ, চালকরা এই ধরণের সমস্যার জন্য ভাল কাজ করেন।
ডেনিস

4

হাস্কেল, 48 46 43 বাইট

f 2=1
f n=until((<1).mod n)pred(n-1)+f(n-1)

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

সম্পাদনা: @ আরোগোস দুটি বাইট সংরক্ষণ করেছেন। ধন্যবাদ!

সম্পাদনা II: ... এবং @xnor আরও 3 বাইট।


-2 বাইট:f 2=1 f n=last[d|d<-[1..n-1],mod n d<1]+f(n-1)
ভ্রুমফোনডেল

@ আরোগোস: ধন্যবাদ! আমি নিজেই স্পষ্ট পুনরাবৃত্তি চেষ্টা করেছি, কিন্তু সরিয়ে নি sum, তাই আমি ভেবেছিলাম এটি সংক্ষিপ্ত নয়।
নিমি

1
untilআরও কিছু বাঁচায়:until((<1).mod n)pred(n-1)+f(n-1)
xnor

4

জাপট , 8 + 2 = 10 8 6 বাইট

òâ1 xo

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

  • ETH প্রোডাকশনগুলিতে 1 বাইট সংরক্ষণ করা হয়েছে।

ব্যাখ্যা

    :Implicit input of integer U.
ò   :Generate an array of integers from 1 to U, inclusive
â   :Get the divisors of each number,
1   :  excluding itself.
x   :Sum the main array
o   :by popping the last element from each sub-array.
    :Implicit output of result

নোট করুন যে এই পোস্ট-x অনুযায়ী দুটি বাইট হিসাবে গণনা । তবে আমি মনে করি আপনি একটি বাইট সংরক্ষণ করতে পারেন ( যুক্তি দেওয়ার সময় মূল সংখ্যা বাদ দেয়)ò2_â1 oâ
ইটিএইচ উত্পাদন

ধন্যবাদ, @ ইথ প্রডাকশনস; আমি এই দুটি জিনিস মিস করতাম। আমি অবাক হই যে এটি যে সমস্ত সমাধানগুলিতে আমরা পতাকাগুলিকে 1 বাইট হিসাবে গণনা করি সেখানে কি প্রত্যাবর্তনমূলক প্রয়োগ হয়? আমি একটি বিকল্প সমাধান নিয়ে কাজ করছিলাম যা কোনওভাবেই পতাকা ব্যবহার করে না; ইশারা â'র যুক্তি আমাকে পেয়েছেন সংরক্ষণ আমি খুঁজছিলাম।
ঝাঁকুনি

আমি এটি ধরে নেব, যেহেতু আমরা সত্যিই আগে conকমত্য অনুসরণ করছিলাম না। BTW, আমি সঙ্গে বাজানো হয়েছে õ Åআগে ও একটি দম্পতি 8- এবং 9-byters পাওয়া যায়নি: õ Åx_/k g, õ Åx_k Å×, õ Åx_â¬o। এবং আপনার প্রতিভা ট্রিক একত্রিত করে õএবং আমি একটি 7 বাইট সমাধান খুঁজে পেয়েছি :-)Åxo
ETH প্রোডাকশন

3

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

q:Q"@Z\l_)vs

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

ব্যাখ্যা

        % Implicitly grab input (N)
q       % Subtract one
:       % Create an array [1...(N-1)]
Q       % Add one to create [2...N]
"       % For each element
  @Z\   % Compute the divisors of this element (including itself)
  l_)   % Grab the next to last element (the largest that isn't itself)
  v     % Vertically concatenate the entire stack so far
  s     % Sum the result



3

কিউবিক্স , 27 39 বাইট

?%\(W!:.U0IU(;u;p+qu.@Op\;;

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

Cubified

      ? % \
      ( W !
      : . U
0 I U ( ; u ; p + q u .
@ O p \ ; ; . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

এটি চালান দেখুন

  • 0IUএকটি সঞ্চয়ী এবং প্রারম্ভিক পূর্ণসংখ্যার সাহায্যে স্ট্যাক সেট আপ করুন। বাইরের লুপে ইউ-টার্ন করুন
  • :(? স্ট্যাক, হ্রাস এবং পরীক্ষার বর্তমান শীর্ষটিকে নকল করুন
  • \pO@ যদি আয়নাতে কিউবের চারপাশে শূন্য লুপ থাকে তবে স্ট্যাক, আউটপুট এবং থামের নীচের অংশটি ধরুন
  • %\! যদি ইতিবাচক, মোড, নির্বাচন করুন এবং পরীক্ষা করুন।
    • u;.W সত্যবাদী হলে, ইউ-টার্ন, মোড ফলাফলটি সরিয়ে ফেলুন এবং লেনটি অভ্যন্তরীণ লুপে ফিরে যাবে
    • U;p+qu;;\(যদি মিথ্যা, ইউ-টার্ন, মোড ফলাফল সরিয়ে ফেলুন, সংক্ষিপ্তকারীকে শীর্ষে আনুন, বর্তমান পূর্ণসংখ্যা (শীর্ষ) বিভাজকটিকে নীচে এবং ইউ-টার্নে যোগ করুন। স্রেফ সঞ্চিতকারী এবং বর্তমান পূর্ণসংখ্যার জন্য স্ট্যাকটি পরিষ্কার করুন, পূর্ণসংখ্যা হ্রাস করুন এবং আবার বাইরের লুপে প্রবেশ করুন।

3

সি # (.নেট কোর) , 74 72 বাইট

n=>{int r=0,j;for(;n>1;n--)for(j=n;--j>0;)if(n%j<1){r+=j;j=0;}return r;}

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

  • কেভিন ক্রুইজসেনকে ধন্যবাদ 2 বাইট

1
আমি জানি এটা প্রায় এক বছর হয়েছে, কিন্তু আপনি গলফ পারেন breakকরতে j=0
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন একটি খুব সাধারণ তবে কার্যকর কৌশল। ভাল যুক্তি!
চার্লি


2

পাইথন 3 , 78 75 73 71 বাইট

বাইট গণনায় লিকি নুনের অজগর উত্তরটির খুব কাছেও নয়।

f=lambda z:sum(max(i for i in range(1,y)if 1>y%i)for y in range(2,z+1))

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


1
আপনি আমার উত্তরের প্রথম সংশোধনের কাছাকাছি আসছেন ... আপনি আমার সম্পাদনার ইতিহাস পরীক্ষা করতে পারেন।
লিকি নুন

ওহ, হা ... আমি কসম খেয়ে বললাম আমি এটা চুরি করিনি ... :)
অফিসিয়ালিম

2

পাইথন 3 , 69 63 59 বাইট

ডেনিসকে 4 বাইট ধন্যবাদ

f=lambda n:n-1and max(j for j in range(1,n)if n%j<1)+f(n-1)

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

এটির 1000 এর জন্য কাজ করার জন্য আমি পুনরাবৃত্তির সীমা 2000 করে দিয়েছি।


+1 আপনার আমার ব্রাউন পয়েন্ট আছে! "70 বাইটের চেয়ে সংক্ষিপ্ত" বলার সময় আমি এই সমাধানটির কথা বলছিলাম ...
মিঃ এক্সকডার

এছাড়াও, এটি পাইথন 2
এও কাজ করে

2

কাঠকয়লা , 37 বাইট

A⁰βF…·²N«A⟦⟧δF⮌…¹ι«¿¬﹪ικ⊞δκ»A⁺β⌈δβ»Iβ

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

লিঙ্কটি ভার্জোজ সংস্করণে। চারকোলে আমি কীভাবে একটি ASCII- শিল্প সম্পর্কিত প্রশ্নটি সমাধান করতে পারি তা নির্ধারণ করতে প্রায় দিন সময় লেগেছিল তবে শেষ পর্যন্ত আমি এটি পেয়েছি এবং আমি আমার জন্য খুব গর্বিত। :-D

হ্যাঁ, আমি নিশ্চিত যে এটি প্রচুর গল্ফ করা যেতে পারে। আমি কেবল আমার সি # উত্তরটির অনুবাদ করেছি এবং আমি নিশ্চিত যে কাঠকয়ালে জিনিসগুলি আলাদাভাবে করা যায়। কমপক্ষে এটি 1000কয়েক সেকেন্ডের মধ্যে কেস সমাধান করে ...



2

পাইথন 2 (পাইপাই) , 145 বাইট

যেহেতু কোড-গল্ফ প্রতিযোগিতাগুলিকে দ্রুততম-কোড প্রতিযোগিতায় পরিণত করা মজাদার, এখানে একটি ও ( এন ) অ্যালগরিদম রয়েছে যা টিআইও-তে 30 সেকেন্ডে এন = 5,000,000,000 সমাধান করে । ( ডেনিসের চালনী হ'ল ও ( এন লগ এন )))

import sympy
n=input()
def g(i,p,k,s):
 while p*max(p,k)<=n:l=k*p;i+=1;p=sympy.sieve[i];s-=g(i,p,l,n/l*(n/l*k+k-2)/2)
 return s
print~g(1,2,1,-n)

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

কিভাবে এটা কাজ করে

আমরা সেট আকার গণনা

এস = {( , ) | 2 ≤ an , 2 ≤ b ≤ বৃহত্তম-যথাযথ-বিভাজক ( )},

এটি ইউনিয়ন হিসাবে পুনর্লিখন দ্বারা, সমস্ত প্রাইম উপর

এস পি = {( পিডি , ) | 2 ≤ dn / পি , 2 ≤ বিডি },

এবং অন্তর্ভুক্তি - বর্জন নীতি :

| এস | = ∑ (−1) মি - 1 | এস পি 1 ∩ ⋯ ∩ এস পি এম | ওভার মি ≥ 1 এবং মৌলিক পি 1 <⋯ < পি মি ≤ √n,

কোথায়

এস পি 1 ∩ ⋯ ∩ এস পি এম = {( পি 1পি এম , ) | 1 ≤ n / ( পি 1পি এম ), 2 ≤ বিপি 1পি এম - 1 },
| এস পি 1 ∩ ⋯ ∩ এস পি এম | = ⌊ n / ( পি 1পি মি ) ⌋⋅ ( পি পি মি।) 1 ⋯ ⋯- 1 ⋅ (⌊ n / ( পি 1পি এম) ) ⌋ + 1) - 2) / 2

যোগফলের সিn ননজারো পদ রয়েছে, যেখানে সি কিছু ধ্রুবক হিসাবে রূপান্তর করে যা সম্ভবত 6⋅ (1 - ln 2) / π 2 ≈ 0.186544। চূড়ান্ত ফলাফল তখন | এস | + এন - 1।


ওহ, এটি দ্রুত ...
মিঃ এক্সকোডার

2

NewStack , 5 বাইট

ভাগ্যক্রমে, আসলে একটি অন্তর্নির্মিত আছে।

Nᵢ;qΣ

ভাঙ্গন:

Nᵢ       Add the first (user's input) natural numbers to the stack.
  ;      Perform the highest factor operator on whole stack.
   q     Pop bottom of stack.
    Σ    Sum stack.

প্রকৃত ইংরেজিতে:

8 এর একটি ইনপুট জন্য একটি উদাহরণ চালানো যাক।

Nᵢ: 1 থেকে 8 পর্যন্ত প্রাকৃতিক সংখ্যার তালিকা তৈরি করুন: 1, 2, 3, 4, 5, 6, 7, 8

;: সবচেয়ে বড় কারণগুলি গণনা করুন: 1, 1, 1, 2, 1, 3, 1, 4

q। প্রথম উপাদানটি সরান:1, 1, 2, 1, 3, 1, 4

Σএবং যোগফলটি গ্রহণ করুন: 1+1+2+1+3+1+4=13


1+1+2+1+3+1+4= 13না 8। তা ছাড়া: দুর্দান্ত উত্তর তাই +1।
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন উফস, এটি ধরার জন্য ধন্যবাদ!
গ্র্যাভিটন

2

জাভা 8, 78 74 72 বাইট

n->{int r=0,j;for(;n>1;n--)for(j=n;j-->1;)if(n%j<1){r+=j;j=0;}return r;}

@ কার্লোস আলেজো এর সি # উত্তর এর বন্দর ।

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

পুরানো উত্তর (78 বাইট):

n->{int r=0,i=1,j,k;for(;++i<=n;r+=k)for(j=1,k=1;++j<i;k=i%j<1?j:k);return r;}

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

ব্যাখ্যা (পুরানো উত্তরের):

n->{                    // Method with integer parameter and integer return-type
  int r=0,              //  Result-integers
      i=1,j,k;          //  Some temp integers
  for(;++i<=n;          //  Loop (1) from 2 to `n` (inclusive)
      r+=k)             //    And add `k` to the result after every iteration
    for(j=1,k=1;++j<i;  //   Inner loop (2) from `2` to `i` (exclusive)
      k=i%j<1?j:k       //    If `i` is dividable by `j`, replace `k` with `j`
    );                  //   End of inner loop (2)
                        //  End of loop (2) (implicit / single-line body)
  return r;             //  Return result-integer
}                       // End of method



1

স্ট্যাকড , 31 বাইট

[2\|>[divisors:pop\MAX]map sum]

এটি অনলাইন চেষ্টা করুন! (1000 বাদে সমস্ত টেস্টকেস, যা 60 সেকেন্ড অনলাইন সময় সীমা অতিক্রম করে ex)

ব্যাখ্যা

[2\|>[divisors:pop\MAX]map sum]
 2\|>                               range from 2 to the input inclusive
     [                ]map          map this function over the range
      divisors                      get the divisors of the number (including the number)
              :pop\                 pop a number off the array and swap it with the array
                   MAX              gets the maximum value from the array
                           sum      sum's all the max's

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