অ্যালিকোট সিরিজের ক্রমের নবম সংখ্যাটি ফেরান


20

০. সংজ্ঞা

একটি ক্রম হ'ল সংখ্যার তালিকা।
একটি সিরিজ হল সংখ্যার তালিকার যোগফল। প্রাকৃতিক সংখ্যার
সেটে সমস্ত "অ-নেতিবাচক পূর্ণসংখ্যা শূন্যের চেয়ে বড়" থাকে। একজন ভাজক একটি প্রাকৃতিক সংখ্যা (এই প্রেক্ষাপটে) একটি প্রাকৃতিক সংখ্যা আমি , যেমন যে ÷ আমি আরো একটি প্রাকৃতিক সংখ্যা।

1. প্রাকদল

এই সাইটে অন্য কোন প্রশ্ন কয়েক ভাগশেষ না রাখিয়া সমাংশে ভাগ করিতে সক্ষম ধারণা, অথবা একটি প্রাকৃতিক সংখ্যা ভাজক ক্রম উল্লেখ একটি যা কম একটিমাতাল সংখ্যা নির্ধারণের মধ্যে এই বিভাজকের যোগফলের গণনা জড়িত, যাকে অ্যালিকোট যোগ বা অ্যালিকোট সিরিজ বলা হয়। প্রত্যেকটি প্রাকৃতিক সংখ্যার নিজস্ব অ্যালিকোট সমষ্টি থাকে, যদিও কোনও সংখ্যার অ্যালিকোট যোগফলের মান সেই সংখ্যার সাথে অগত্যা অনন্য নয়। ( উদাহরণস্বরূপ , প্রতিটি মৌলিক সংখ্যার একটি অ্যালিকোট যোগফল 1 থাকে has)

2. চ্যালেঞ্জ

একটি প্রাকৃতিক সংখ্যা দেওয়া হয়েছে , অ্যালিকোট অঙ্কের ক্রমের তৃতীয় সংখ্যাটি nফিরিয়ে দিন n। 1 টির জন্য সিরিজটি শুরু করে ক্রমের প্রথম কয়েকটি সিরিজ হ'ল:

{0, 1, 1, 3, 1, 6, 1, 7, 4, 8, 1, 16, 1, 10, 9, 15, 1, 21, 1, 22, 11, 14, 1, 36, 6, 16, 13}

সংযুক্ত, এগুলি দেখতে:

0113161748116110915121122111413661613

আপনার পছন্দ অনুসারে ইনপুট শূন্য-সূচকযুক্ত বা এক-সূচকযুক্ত হতে পারে। সমাধানগুলি অবশ্যই 10,000 তম সংখ্যায় ফেরত দিতে সক্ষম প্রোগ্রাম বা ফাংশন হতে পারে (ইনপুট আপ পর্যন্ত 9999বা 10000)। সংক্ষিপ্ততম কাজের সমাধান জিতেছে।

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

সঠিক ইনপুট-আউটপুট জোড়া অন্তর্ভুক্ত করা উচিত, তবে সীমাবদ্ধ নয়, নিম্নলিখিত:

   0 or     1    ->    0
   4 or     5    ->    1
  12 or    13    ->    6
9999 or 10000    ->    7

"বা" এর আগের সংখ্যাটি 0-সূচকযুক্ত; নীচের সংখ্যাটি 1-সূচকযুক্ত।
অনুরোধের ভিত্তিতে অতিরিক্ত পরীক্ষার কেস সরবরাহ করা যেতে পারে।

৪. রেফারেন্স

ওইআইএস- এর সংখ্যার তালিকা এবং তাদের অ্যালিকোটের পরিমাণ রয়েছে has


2
ভাল প্রথম চ্যালেঞ্জ, বিটিডব্লিউ। :)
মার্টিন ইন্ডার

1
যদি ভাষা 10 ক্যার অক্ষরের স্ট্রিং পরিচালনা করতে পারে না ?? (উদাঃ ভয়ঙ্কর ওরাকল এসকিউএল 4 কে সীমা ) এর ভাষা সীমা যদি উত্তরটি বৈধ হয়?
গিয়াকোমো গারাবেলো

@ মার্টিনইন্দর, ধন্যবাদ! এবং এই লিঙ্কের জন্য ধন্যবাদ; এটি আলোকিত ছিল। এখানে কি এমন কিছু আছে যা ব্যাখ্যা করে যে ভাষাগুলিতে সীমাবদ্ধতা সহ উত্তরগুলি কীভাবে আচরণ করা যায়? আমি কিছুই খুঁজে পেলাম না, তবে আমি জানি এটির অর্থ এখানে নেই। :)
জো

আমি পুরোপুরি ঘন হয়ে উঠছি তবে এই সিরিজের সংখ্যাগুলি কীভাবে গণনা করা হবে?
টম কার্পেন্টার

@ টমকার্পেন্টার: প্রথম উপাদানটির জন্য 1 এর চেয়ে কম 1 এর সকল বিভাজক নিন এবং তাদের একসাথে যুক্ত করুন। (1 হল 1 এর একমাত্র বিভাজক, সুতরাং প্রথম উপাদানটি শূন্য হিসাবে শেষ হয়)) দ্বিতীয় উপাদান, 2 এর বিভাজক যা 2 এর চেয়ে কম হয় (কেবল 1 এটি ফিট করে); তৃতীয়, 3 এর বিভাজক (এখনও মাত্র 1); ইত্যাদি। 4 এর বিভাজকগুলি হ'ল {1, 2}, এবং 1 + 2 == 3, সুতরাং চতুর্থ উপাদানটি 3 3. এটিও বের করতে আমার কিছুটা সময় লেগেছিল;)
জো

উত্তর:


6

05 এ বি 1 , 14 11 10 বাইট

গণনা n = 9999 প্রায় 15 সেকেন্ডে। কোড:

ÌL€Ñ€¨OJ¹è

ব্যাখ্যা:

Ì           # Increment implicit input by 2
 L          # Generate the list [1 .. input + 2]
  ۄ        # For each, get the divisors
    ۬      # For each, pop the last one out
      O     # Sum all the arrays in the array
       J    # Join them all together
        ¹è  # Get the nth element

সিপি -1222 এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!


6

গণিত, 51 বাইট

Array[##&@@IntegerDigits[Tr@Divisors@#-#]&,#][[#]]&

একটি নামবিহীন ফাংশন যা পূর্ণসংখ্যা গ্রহণ করে এবং প্রদান করে এবং 1-ভিত্তিক সূচক ব্যবহার করে। 10000তাত্ক্ষণিকভাবে ইনপুট পরিচালনা করে।

ব্যাখ্যা

এটি সংজ্ঞাটির একটি খুব সোজা-অগ্রসর বাস্তবায়ন, প্রথম nবিভাজকের যোগফল সর্বদা তৃতীয় সংখ্যা নির্ধারণের জন্য পর্যাপ্ত থাকে তা ব্যবহার করে n। যথারীতি, গল্ফযুক্ত গাণিতিকের পড়ার ক্রমটি কিছুটা মজার হলেও:

Array[...&,#]...&

এই সব নামহীন ফাংশন বাম সবাইকে মান প্রয়োগের ফলাফল সঙ্গে একটি তালিকা তৈরি করে iথেকে 1থেকে nসমেত।

...Tr@Divisors@#-#...

আমরা বিভাজনকারীদের গণনা করে i, তাদের সাথে সংক্ষিপ্ত করে Trএবং iনিজেকে বিয়োগ করে শুরু করি যাতে এটি কেবল বিভক্তির যোগফলের চেয়ে কম i

...IntegerDigits[...]...

এটি ফলাফলকে তার দশমিক অঙ্কের তালিকায় পরিণত করে।

##&@@...

এবং এটি "তালিকা" শীর্ষস্থানীয়কে সরিয়ে দেয়, যাতে সমস্ত অঙ্কের তালিকা স্বয়ংক্রিয়ভাবে ফলাফলের সাথে সংমিশ্রিত হয় Array। কীভাবে ##কাজ করে সে সম্পর্কে আরও বিশদের জন্য এই পোস্টে "যুক্তিগুলির সিকোয়েন্সস" বিভাগটি দেখুন ।

...[[#]]

পরিশেষে, আমরা nফলাফল থেকে তম সংখ্যাটি নির্বাচন করি ।


4

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

:2-I,?:?:1yrc:Im.;0.
:1e:2f+.
>.>0,?:.%0

এটি 1-ইনডেক্সড, এর জন্য 0.1 সেকেন্ড সময় নেয় N = 100, 15 সেকেন্ডের জন্য N = 1000। আমি বর্তমানে দৌড়াচ্ছি N = 10000, রান চালানোর সময়টি শেষ হয়ে গেলে আমি এটির প্রতিবেদন করব (যদি আমার অনুমানটি সঠিক হয় তবে এটিতে প্রায় 8 ঘন্টা লাগবে)

সম্পাদনা করুন : ব্র্যাচ্লাগে অকাল সীমাবদ্ধতার সমাধান করে, এখন এটি (3 বাইট দীর্ঘতর কোডে) প্রায় 2.5কয়েক মিনিট সময় নেয় 10000তবে out of global stackত্রুটি ফিরে আসে ।

ব্যাখ্যা

  • প্রধান ভবিষ্যদ্বাণী: Input = N

    :2-I,                 I = N - 2
         ?:?:1y           Find the N first valid outputs of predicate 1 with input N
               rc         Reverse and concatenate into a single number
                 :Im.     Output is the Ith digit of that number
                     ;    Or (I strictly less than 0)
                      0.  Output is 0
    
  • ভবিষ্যদ্বাণী 1: বিভাজকের যোগফলকে গণনা করে

    :1e                   Get a number between N and 1
       :2f                Find all valid outputs of predicate 2 with that number as input
          +.              Output is the sum of those outputs
    
  • ভবিষ্যদ্বাণী 2: ইনপুটটির একটি বিভাজকের সাথে আউটপুট একত্রিত করে

    >.>0,                 Output is a number between Input and 0
         ?:.%0            Input is divisible by Output
    

1
-Gবিকল্পের সাথে আপনি আরও বিশ্বব্যাপী স্ট্যাক বরাদ্দ করতে পারেন । ডিফল্ট শুধুমাত্র হয় 128M। আপনি উদাহরণস্বরূপ ব্যবহার করতে পারেন: swipl -G2G2 GO ব্যবহার করতে।
মাদুর

4

পাইথ, 26 21 20 15 বাইট

@sm`sf!%dTtUdSh

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

0-ভিত্তিক সূচক ব্যবহার করে। প্রোগ্রামটি ও (n²) এবং আমার ২০০৮ মেশিনে প্রায় 14 মিনিটের মধ্যে n = 9999 এর জন্য পূর্ণ হয় ।


এই জটিল বিভাজন অনুসন্ধানে কী হবে? f!%dTr1dঅনেক খাটো (তবে ধীর)
জাকুব

@ জাকুব হুপ, 20 বাইট সমাধানের জন্য ভুল সংস্করণটি সংশোধন করেছে।
পূর্কাকুডারী

f!%TYtUTআমি যা করতাম তা হ'ল
পূর্কাকুডারী

@ জাকুব আমি এতে পরিবর্তন করেছি এটি এখনও n = 9999 এর জন্য চলছে, এখন 5
মিনিটেরও

4

জেলি, 13 11 10 বাইট

@ আদনানকে 2 বাইট এবং @ ডেনিসকে আরও 1 টি ধন্যবাদ

ÆDṖSDµ€Fị@

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

1-ভিত্তিক সূচক ব্যবহার করে। অনলাইনে 2 সেকেন্ডের নীচে এন = 10000 এর জন্য সম্পূর্ণ ।


ÆDṖSDµ€Fị@একটি বাইট সংরক্ষণ করে।
ডেনিস

@ ডেনিস কি তাই পুরো প্রথম চেইনে প্রয়োগ করে ?
পুর্কাকুডারী

@ পিটু ১৯৯৮: হ্যাঁ, স্পষ্টভাবে: সাধারণত, পার্স সময়, এ প্রয়োগ করা হয় chain.pop() if chain else chains.pop()। সদ্য শুরু করা চেইন খালি, সুতরাং পরিবর্তে শেষ সমাপ্ত চেইন ব্যবহার করা হবে।
লিন

3

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

0 সূচকযুক্ত

<?php for(;strlen($s)<=$a=$argv[1];$s.=$n)for($n=0,$j=++$i;--$j;)$i%$j||$n+=$j;echo$s[$a];

একেবারে সূক্ষ্ম বা এটিকে কাছে যাওয়ার কোনও চতুরতার সাথে নয়।
এছাড়াও, যথারীতি, তিনটি নোটিশ তৈরি করে যা উপেক্ষা করা হয়।


3

জে , 34 বাইট

{[:;1<@":@(-~>:@#.~/.~&.q:)@+i.@>:

এটি শূন্য-সূচকযুক্ত এবং বিভাজকের অঙ্কগুলি গণনা করতে নীচের সূত্রটি ব্যবহার করে।

সূত্র

ব্যাখ্যা

{[:;1<@":@(-~>:@#.~/.~&.q:)@+i.@>:  Input: n
                                >:  Increment n
                             i.@    Create the range [0, 1, ..., n]
    1                       +       Add one to each to get [1, 2, ..., n+1]
          (               )@        For each value
                        q:            Get the prime factors
                   /.~&.              For each group of equal prime factors
                #.~                     Raise the first to the first power, the second
                                        squared and so on, and sum them
             >:@                        Increment that sum
                      &.q:            Reduce the groups using multiplication
           -~                         Subtract the initial value from that sum
       ":@                            Convert each to a string
     <@                               Box each
 [:;                                Unbox each and concatenate the strings
{                                   Select the character from that string at index n
                                    and return it

2

এমএটিএল , 16 15 বাইট

:"@@q:\~fsV]vG)

সূচীকরণ 1-ভিত্তিক।

সর্বশেষ পরীক্ষার কেস অনলাইন সংকলকটি শেষ হয়েছে, তবে এটি প্রায় 15 সেকেন্ডের মধ্যে অফলাইন সংকলকটির সাথে সঠিক ফলাফল দেয়।

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

:         % Take input n. Push [1 2 ... n]
"         % For each k in [1 2 ... n]
  @       %   Push k
  @q:     %   Push [1 2 ... k-1]
  \       %   Modulo. Zero values correspond to divisors
  ~f      %   Indices of zeros. These are the divisors
  s       %   Sum
  V       %   Convert to string
]         % End for each
v         % Concatenate all stack contents vertically
G)        % Take n-th digit. Implicitly display

2

হাস্কেল, 52 বাইট

(([1..]>>= \n->show$sum[m|m<-[1..n-1],mod n m<1])!!)

ব্যবহারের উদাহরণ: (([1..]>>= \n->show$sum[m|m<-[1..n-1],mod n m<1])!!) 12->6

এটি সংজ্ঞাটির প্রত্যক্ষ বাস্তবায়ন: ফোরচ nসমষ্টি এটি বিভাজক এবং এটি একটি স্ট্রিংয়ে রূপান্তর করে। এই জাতীয় সমস্ত স্ট্রিং জড়িত করুন এবং অনুরোধ সূচকটিতে উপাদানটি চয়ন করুন। হাস্কেলের অলসতা প্রয়োজন হিসাবে nঅসীম তালিকা থেকে কেবলমাত্র অনেক বেশি সময় নেয় [1..]


1

পাইথন 3.5, 103 93 92 বাইট:

R=range;A=lambda f:''.join([str(sum([j for j in R(1,i)if i/j%1==0]))for i in R(1,f+1)])[f-1]

পোস্টে বর্ণিত পদ্ধতিটির অত্যন্ত সহজবোধ্য বাস্তবায়ন।

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

ইনপুট জন্য অনলাইন সংকলকটিতে বরাদ্দকৃত 5 সেকেন্ডের মধ্যে পুরোপুরি শেষ হয় না 10000, তবে এটি আমার মেশিনে প্রায় 8.5 সেকেন্ডের মধ্যে একই ইনপুটটির জন্য শেষ করে।


1

অক্টাভা, 71 বাইট

এই এক শুধুমাত্র অষ্টাভ। এটি ম্যাটল্যাবে কাজ করবে না। একটি ভার্চুয়াল ফাংশন তৈরি করা হয় যা 1-ইনডেক্সড সংখ্যায় কাজ করে। এটি সম্ভবত আরও কিছুটা সরল করা যেতে পারে। এই সন্ধ্যায় একটি চেহারা হবে।

@(x)c((c=num2str(arrayfun(@(n)sum(b(~rem(n,b=(1:n-1)))),1:x)))~=' ')(x)

আপনি এখানে অনলাইনে চেষ্টা করতে পারেন ।

উপরের কমান্ডটি কেবল উপস্থাপিত করুন a=বা যা কিছু উপস্থাপন করুন (কেবল যাতে আপনি এটি একাধিকবার ব্যবহার করতে পারেন) এবং তারপরে a(10000)বা যা কিছু করুন। এটি গণনা করতে প্রায় 7 সেকেন্ড সময় নেয় যে 10000 তম সংখ্যাটি 7।


1

জাভা 8, 220 বাইট

import java.util.stream.IntStream;
char a(int n){return IntStream.range(1,n+2).map(i->IntStream.range(1,i).filter(k->i%k==0).sum()).mapToObj(Integer::toString).collect(java.util.stream.Collectors.joining("")).charAt(n);}

ভাল, এটি অন্তত দ্রুত। আমার মেশিনে 9999/10000 তম উপাদানটি পেতে এটি 0.3 সেকেন্ডে গড়। এটি আপনার নির্দিষ্ট সূচক হিসাবে কেবলমাত্র অনেক অ্যালিকোট পরিমাণ তৈরি করে। এর অর্থ বেশিরভাগ ক্ষেত্রে স্ট্রিং আপনার সূচকের চেয়ে কিছুটা দীর্ঘ হবে কারণ কিছু অ্যালিকোট রাশির 2 বা ততোধিক অঙ্ক থাকে তবে বেশিরভাগ অংশে এটি কেবল আমাদের স্ট্রিংয়ের দীর্ঘতর জেনারেট করে।

ব্যবহার:

public static void main(String[] args) {
    System.out.println(a(0));
    System.out.println(a(4));
    System.out.println(a(12));
    System.out.println(a(9999));
}

Ungolfed:

public static void main(String[] args) {
    System.out.println(all(0));
    System.out.println(all(4));
    System.out.println(all(12));
    System.out.println(all(9999));
}

static int aliquotSum(int n) {
    return IntStream.range(1, n).filter(k -> n % k == 0).sum();
}

static IntStream sums(int n) {
    return IntStream.range(1, n + 2).map(i -> aliquotSum(i));
}

static String arraycat(IntStream a) {
    return a.mapToObj(Integer::toString).collect(java.util.stream.Collectors.joining(""));
}

static char all(int index) {
    return arraycat(sums(index)).charAt(index);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.