প্রাথমিক কারণগুলি গণনা করুন


27

কিছুক্ষণ আগে আমাদের একটি প্রধান ফ্যাক্টরীকরণ চ্যালেঞ্জ ছিল , তবে সেই চ্যালেঞ্জটি প্রায় ছয় বছরের পুরানো এবং সবেমাত্র আমাদের বর্তমান প্রয়োজনীয়তাগুলি পূরণ করে, তাই আমি বিশ্বাস করি এটি একটি নতুন সময়ের জন্য এসেছে।

চ্যালেঞ্জ

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

বিধি

  • ইনপুট এবং আউটপুট কোনও মানক পদ্ধতি এবং যে কোনও মানক বিন্যাসে দেওয়া যেতে পারে।
  • সদৃশ উপাদানগুলি আউটপুটে অন্তর্ভুক্ত থাকতে হবে।
  • আউটপুট যে কোনও ক্রমে হতে পারে।
  • ইনপুট 2 - 31 বা 1 এর চেয়ে কম হবে না ।
  • অন্তর্নির্মিত অনুমোদিত, কিন্তু একটি অন্তর্নির্মিত সমাধান সহ উত্সাহিত করা হয়।

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

2 -> 2
3 -> 3
4 -> 2, 2
6 -> 2, 3
8 -> 2, 2, 2
12 -> 2, 2, 3
255 -> 3, 5, 17
256 -> 2, 2, 2, 2, 2, 2, 2, 2
1001 -> 7, 11, 13
223092870 -> 2, 3, 5, 7, 11, 13, 17, 19, 23
2147483646 -> 2, 3, 3, 7, 11, 31, 151, 331
2147483647 -> 2147483647

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


2
আপনি যদি বিল্ট-ইনগুলি অস্বীকার করেন তবে আরও ভাল হত।
বাফার ওভার পড়ুন

2
@ দ্য বিটবাইট চ্যালেঞ্জগুলি যেগুলি বিল্ট-ইনগুলি অস্বীকার করে সাধারণত ওয়াই চ্যালেঞ্জ ছাড়াই ডো এক্স হিসাবে বিবেচিত হয় , বিশেষত যেহেতু সমাধান প্রযুক্তিগতভাবে কোনও অন্তর্নির্মিত কিনা তা কখনও কখনও বলা মুশকিল।
ইটিএইচ প্রডাকশনগুলি

1
ঠিক আছে, <5 বাইট সমাধানের প্রবাহ উপভোগ করুন! আমি এটি লেখার সাথে সাথে পাইথ এটি ইতিমধ্যে 1 বাইটে করে।
বাফার ওভার পড়ুন

2
@ দ্য বিটবাইট প্রাথমিকভাবে এটি ভাষা-ভাষা-ভাষা চ্যালেঞ্জ হিসাবে ভাবেন। পাইথনের সলিউশন বা বিল্টিন ছাড়াই অন্য কোনও ভাষাকে হারাতে চেষ্টা করুন।
isaacg

1
@ আইসাকগ ওয়েল, ভাষা-ভাষা-ভাষা এটি দেখার আরও ভাল উপায়, আমি সম্মত।
বাফার ওভার পড়ুন

উত্তর:




10

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

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

প্রতিটি সম্ভাব্য বিভাজনকে iঘুরে দেখার চেষ্টা করে । যদি iকোনও বিভাজক হয় তবে এটিকে সংশোধন করে পুনরায় আর্টস করে n/i। অন্য, পরবর্তী সর্বোচ্চ বিভাজক চেষ্টা করে। বিভাগগুলি ক্রমবর্ধমান ক্রমে যাচাই করা হয়, কেবলমাত্র প্রাথমিকগুলি পাওয়া যায়।

একটি প্রোগ্রাম হিসাবে, 55 বাইটের জন্য:

n=input();i=2
while~-n:
 if n%i:i+=1
 else:n/=i;print i

8

গণিত, 38 30 বাইট

8 মার্টিনের জন্য @ মার্টিনইেন্ডারকে ধন্যবাদ!

Join@@Table@@@FactorInteger@#&

কীভাবে FactorInteger[#][[All, 1]]&? 26 বাইট
ডেভিড জি স্টর্ক

@ ডেভিডজি.স্টর্ক যে কাজ করবে না কারণ শক্তি 1 এর চেয়ে বেশি হলে এটি প্রধান কারণগুলির পুনরাবৃত্তি করবে না
জংহওয়ান মিন



4

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

f=(n,x=2)=>n-1?n%x?f(n,x+1):[x,...f(n/x)]:[]

মারাত্মকভাবে অদক্ষতার কারণে যে এটি শেষ সহ 2 টি থেকে প্রতিটি প্রধান ফ্যাক্টর পর্যন্ত পুনরাবৃত্তি করে। আপনি সময় জটিলতা নাটকীয়ভাবে 5 বাইট ব্যয়ে কাটাতে পারেন:

f=(n,x=2)=>x*x>n?[n]:n%x?f(n,x+1):[x,...f(n/x,x)]


3

আসলে , 6 বাইট

w`in`M

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

ব্যাখ্যা:

w`in`M
w       factor into primes and exponents
 `in`M  repeat each prime # of times equal to exponent

আপনি সম্ভবত এখনই ব্যবহার করতে পারেন o, তাই না?
অলিভার

@ অলিভার হ্যাঁ, তবে আমি সাধারণত বিল্টিন সহ পুরানো উত্তরগুলি আপডেট করি না।
মেগো

3

জে, 2 বাইট

q:

বডি কমপক্ষে 30 টি অক্ষর হতে হবে।




2

স্বন-বধির , 3 বাইট

এই ভাষাটি বেশ অল্প বয়স্ক এবং এখনও বড় কোনও কিছুর জন্য প্রস্তুত নয়, তবে এটি প্রধান কারণ নির্ধারণ করতে পারে:

A/D

এটি ব্যবহারকারীর ইনপুটটির জন্য অপেক্ষা করবে এবং তারপরে মূল উপাদানগুলির তালিকা আউটপুট করবে।


2

ম্যাটল্যাব, 6 বাইট

আমি মনে করি এটির কোনও ব্যাখ্যা দেওয়ার দরকার নেই।

factor

1

বাশ + কোর্টিলস, 19 বাইট

factor|sed s/.*:.//

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


যদি হোয়াইটস্পেসে আউটপুট ব্যবহার না করে তবে আপনি কোনও বাইট শেভ করতে পারেন factor|sed s/.*://। এছাড়াও factor|cut -d: -f2(বা factor|cut -d\ -f2আপনার বর্তমান আউটপুটটির সাথে মেলে) একই বাইট দৈর্ঘ্য তবে দ্রুত চালানো যাচ্ছে এবং কম মেমরির ওভারহেড ব্যবহার করবে।
কালেব

আমি ওপিকে হোয়াইটস্পেস সম্পর্কে জিজ্ঞাসা করব। দুঃখের বিষয়, আমার factor|cut -d\ -f2-নেতৃত্বাধীন স্থানটি অপসারণ করা দরকার যা এক বাইট আরও দীর্ঘ।
ডেনিস

1

ব্যাচ, 96 বাইট

@set/an=%1,f=2,r=0
:l
@set/af+=!!r,r=n%%f
@if %r%==0 echo %f%&set/an/=f
@if %n% gtr 1 goto l


1

হেক্সাগনি , 58 বাইট

এখনও গল্ফিং করা হয়নি, তবে @ মার্টিনইেন্ডার এটিকে যাইহোক ধ্বংস করতে সক্ষম হওয়া উচিত

পেছনের স্থান সহ স্থান-বিভাজিত উপাদানগুলি মুদ্রণ করে

Golfed:

2}\..}$?i6;>(<...=.\'/})."@...>%<..'':\}$"!>~\{=\)=\}&<.\\

পাড়া আউট:

     2 } \ . .
    } $ ? i 6 ;
   > ( < . . . =
  . \ ' / } ) . "
 @ . . . > % < . .
  ' ' : \ } $ " !
   > ~ \ { = \ )
    = \ } & < .
     \ \ . . .

ব্যাখ্যা পরে আসছে।




1

সি, 92 বাইট

int p(int n){for(int i=2;i<n;i++)if(n%i==0)return printf("%d, ",i)+p(n/i);printf("%d\n",n);}

অবরুদ্ধ সংস্করণ:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int prime(int number) {
    for (int i = 2; i < number; i++) {
        if (number % i == 0) {
            printf("%d, ", i);
            return prime(number / i); //you can golf away a few bytes by returning the sum of your recursive function and the return of printf, which is an int
        }                             //this allow you to golf a few more bytes thanks to inline calls
    }
    printf("%d\n", number);
}

int main(int argc, char **argv) {
    prime(atoi(argv[1]));
}




0

পার্ল 6 , 77 64 বাইট  

{my$a=$_;.is-prime??$_!!map ->\f{|({$a%f||($a/=f)&&f}...^*!= f)},(2... *>$a)}

চেষ্টা করে দেখুন

{my$a=$_;map ->\f{|({$a%f||($a div=f)&&f}...^ f>*)},(2... *>$a)}

এটি ব্যবহার করে দেখুন (দ্রষ্টব্য: এটি শেষ করার জন্য পর্যাপ্ত সময় নেই)


আরও অনেক পারফরম্যান্স সংস্করণটি 100 বাইটে কিছুটা দীর্ঘ।

{my$a=$_;map ->\f{|({$a.is-prime??($/=$a)&&($a=0)||$/!!($a%f||($a div=f)&&f)}...^ f>*)},(2... *>$a)}

চেষ্টা করে দেখুন


প্রসারিত: (by৪ বাইট সংস্করণ)

{
  my $a = $_;  # the input 「$_」 is read-only by default
  map
    -> \f {
      |(              # slip ( flattens into outer list )

        # generate sequence of 0 or more 「f」s
        {
          $a % f      # is it not evenly divisible

          ||          # if it is evenly divisible
          ($a div=f)  # divide it
          &&          # and
          f           # return 「f」
        }
        ...^   # keep doing that until
        f > *  # 「f」 is bigger
      )

    },

    # do that over the following list

    (2 ... * > $a) # generate a sequence from 2
                   # up to whatever the value of $a
                   # is at the time of the check
}

0

ভিবি.এনইটি, 86 বাইট

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

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

Sub A(a)
    For i=2To a ' VB re-evaluates a each time, so the /= at the end of the loop shortens this
        While a Mod i=0 ' this is a factor. We've grabbed primes before this, so this must be a prime factor
            Console.Write(i &",") ' output
            a/=i ' "mark" the prime as "used"
        End While
    Next
End Sub


0

জাভা (ওপেনজেডিকে) , 259 বাইট

import java.util.*;interface g{static void main(String[]z){int a=new Scanner(System.in).nextInt();int b=0;int[]l={};for(int i=2;i<=a;i++){for(;a%i<1;l[b-1]=i){l=Arrays.copyOf(l,b=l.length+1);a/=i;}}for(int i=0;i<b;i++)System.out.print(l[i]+(i<b-1?", ":""));}}

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


এই জমাটি কীভাবে আরও গল্ফ করা যেতে পারে তা দেখতে এই সূত্রটি দেখুন: gist.github.com/kritixilithos/fde37dc5a8ae54852aa134a6e70ea495 । আপনার যদি কিছু স্পষ্ট করার দরকার হয় তবে আমাকে 19 তম বাইটে
বিনা দ্বিধায়

0

রুবি, 61 বাইট

require'prime';->x{x.prime_division.flat_map{|x|[x[0]]*x[1]}}

সবচেয়ে কম বিল্টিন-সংস্করণ আমি ভাবতে পারি।


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