প্রধান শক্তি থেকে প্রধানমন্ত্রী পুনরুদ্ধার করুন


13

সংজ্ঞা : একটি মৌলিক শক্তি একটি প্রাকৃতিক সংখ্যা যা পি এন আকারে প্রকাশ করা যায় যেখানে পি একটি মৌলিক এবং এন একটি প্রাকৃতিক সংখ্যা।

কার্য : একটি প্রাইম পাওয়ার দেওয়া n n > 1, প্রাইম পি করুন return

টেস্টকেসগুলি :

input output
9     3
16    2
343   7
2687  2687
59049 3

স্কোরিং : এটি । বাইট জিতে সংক্ষিপ্ত উত্তর।


1
n1 হতে পারে?
ব্যবহারকারী 202729

@ ব্যবহারকারী 202729: চতুর্থ পরীক্ষার ক্ষেত্রে n = 1
এমিগানা

15
সম্ভবত প্রধান অংশের পরিবর্তে পাওয়ার অংশটি পাওয়া আরও চ্যালেঞ্জ হত । যেমনটি রয়েছে, এটি কেবল "সর্বনিম্ন ফ্যাক্টরটি 1 না 1"
জো কিং

উত্তর:


13

শেক্সপিয়ার প্রোগ্রামিং ভাষা , 209 207 বাইট

T.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Listen tothy!Page:You cat!Scene V:.Page:You be the sum ofyou a cat!Be the product ofthe quotient betweenI you you worse I?If soLet usScene V.Open heart

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

(I/you)*you<Iএসপিএলের চেয়ে কম I%you>0


1
কাজের জন্য সঠিক সরঞ্জাম।
জেরেমি ওয়েরিচ

12

আপনি কি নিশ্চিত যে একটি তালিকা (বা []সংখ্যার চারপাশে) একটি বৈধ আউটপুট?
এরিক দি আউটগল্ফার

@ এরিকথ আউটগল্ফার: প্রাসঙ্গিক মেটা
এমিগানা

হু, সে সম্পর্কে জানতাম না, ধন্যবাদ।
এরিক আউটগল্ফার

8
যারা ভাবছেন তাদের জন্য,f = push list of prime factors (no duplicates)
এমসিসিসিএস

7

জাভা 8, 46 39 37 বাইট

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

-7 বাইট পরোক্ষভাবে @ স্যাথোগগুয়াকে ধন্যবাদ জানায়
-২ বাইট জোকিংকে ধন্যবাদ

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

ব্যাখ্যা:

n->{               // Method with integer as both parameter and return-type
  int r=1;         //  Start the result-integer `r` at 1
  for(;n%++r>0;);  //  Increase `r` by 1 before every iteration with `++r`
                   //  and loop until `n` is divisible by `r`
  return r;}       //  After the loop, return `r` as result

পাইথন 3-এ লুইস মেন্ডোর উত্তর অনুসরণ করে , n->{for(int i=1;++i<=n;)if(n%i<1)return i;}43 টি চরিত্র পেতে কি লেখা সম্ভব হবে ? (আমি জাভা বলি না))
স্যাথোগগুয়া

@ স্যাথোগগুয়া যেমন আপনার এখনই নেই, যেহেতু জাভা পদ্ধতিতে সর্বদা ফিরতে হবে। n->{for(int i=1;++i<=n;)if(n%i<1)return i;return n;}কাজ করবে, তবে দুর্ভাগ্যক্রমে দীর্ঘ। জাভা অসীম লুপগুলিতে একক রিটার্ন পেতে পারে, যা সত্যই বাইটগুলি সংরক্ষণ করে না, তাই ধন্যবাদ! n->{for(int i=1;;)if(n%++i<1)return i;}। যেহেতু শেষ পর্যন্ত iহয়ে যাবে n(পরীক্ষার মামলার মতো 2687) এবং n%n==0, i<=nএই ক্ষেত্রে এটির প্রয়োজন নেই।
কেভিন ক্রুইজসেন

1
কিভাবে 37 বাইট । আর কোনও গল্ফ করা যায় কিনা তা দেখার জন্য আমি জাভার সাথে যথেষ্ট পরিচিত নই
জো কিং

@ জোকিং আমি আর গল্ফের জন্য কিছুই দেখতে পাচ্ছি না, তাই -2 এর জন্য ধন্যবাদ।
কেভিন ক্রুইজসেন

5

পাইথন 3 , 36 35 বাইট

-১ বাইট ধন্যবাদ ম্যাথমন্ডনে

f=lambda n,x=2:n%x and f(n,x+1)or x

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

রিকার্সিভ ফাংশন যা 1 এর চেয়ে বড় ফ্যাক্টরটি খুঁজে পায়


1
খুশী হলাম। আপনি যদি প্রতিস্থাপন if/elseকরেন তবে আপনি (সাধারণত) একটি বাইট সংরক্ষণ করতে পারেন and/or। লাইক f=lambda n,x=2:n%x and f(n,x+1)or x,।
mathmandan


4

হোয়াইটস্পেস , 80 61 60 বাইট

[S S T  T   N
_Push_-1][S S S N
_Push_0][T  N
T   T   _Read_STDIN_as_number][N
S S N
_Create_Label_LOOP][S S S T N
_Push_1][T  S S T   _Subtract][S N
S _Duplicate][S S S N
_Push_0][T  T   T   _Retrieve][S N
T   _Swap][T    S T T   _Modulo][N
T   T   N
_If_0_Jump_to_Label_LOOP][S S T T   N
_Push_-1][T S S N
_Multiply][T    N
S T _Print_as_number]

-20 বাইটস @ জোকিংকে ধন্যবাদ ।

বর্ণ S(স্থান), T(ট্যাব) এবং N(নতুন-লাইন) কেবল হাইলাইট হিসাবে যুক্ত করা হয়েছে।
[..._some_action]শুধুমাত্র ব্যাখ্যা হিসাবে যুক্ত।

এটি অনলাইনে চেষ্টা করুন (কেবলমাত্র কাঁচা জায়গা, ট্যাব এবং নতুন লাইন সহ)।

সিউডো-কোডে ব্যাখ্যা:

Integer n = STDIN as integer
Integer i = -1
Start LOOP:
  i = i - 1
  if(n modulo-i is negative)
    Go to next iteration of LOOP
  else
    i = i * -1
    Print i
    Exit with error: No exit defined

উদাহরণ রান: input = 9

Command   Explanation                    Stack        Heap     STDIN    STDOUT    STDERR

SSTTN     Push -1                        [-1]
SSSN      Push 0                         [-1,0]
TNTT      Read STDIN as integer          [-1]         {0:9}    9
NSSN      Create Label_LOOP              [-1]         {0:9}
 SSSTN    Push 1                         [-1,1]       {0:9}
 TSST     Subtract top two (-1-1)        [-2]         {0:9}
 SNS      Duplicate top (-2)             [-2,-2]      {0:9}
 SSSN     Push 0                         [-2,-2,0]    {0:9}
 TTT      Retrieve                       [-2,-2,9]    {0:9}
 SNT      Swap top two                   [-2,9,-2]    {0:9}
 TSTT     Modulo top two (9%-2)          [-2,-1]      {0:9}
 NTSN     If neg.: Jump to Label_LOOP    [-2]         {0:9}

 SSTTN    Push -1                        [-2,-1]      {0:9}
 TSST     Subtract top two (-2-1)        [-3]         {0:9}
 SNS      Duplicate top (-2)             [-3,-3]      {0:9}
 SSSN     Push 0                         [-3,-3,0]    {0:9}
 TTT      Retrieve                       [-3,-3,9]    {0:9}
 SNT      Swap top two                   [-3,9,-3]    {0:9}
 TSTT     Modulo top two (9%-3)          [-3,0]       {0:9}
 NTSN     If neg.: Jump to Label_LOOP    [-3]         {0:9}
 SSTTN    Push -1                        [-3,-1]      {0:9}
 TSSN     Multiply top two (-3*-1)       [3]          {0:9}
 TNST     Print as integer               []           {0:9}             3
                                                                                  error

প্রোগ্রামটি একটি ত্রুটি সহ বন্ধ হয়ে যায়: কোনও প্রস্থান খুঁজে পাওয়া যায় নি।


1
আপনার i == nচেক দরকার ? n%nযাইহোক 0 হবে
জো কিং

@ জোকিং আহ, অবশ্যই। ধন্যবাদ, 19 বাইট ঠিক সেখানে সংরক্ষণ করা। :)
কেভিন ক্রুইজসেন

আপনি কি যদি না লুপ করতে পারেন n%iএবং পরে মুদ্রণটি কল করতে পারেন ?
জো কিং

1
@ জোকিং আমি বেশ নিশ্চিত নই। হোয়াইটস্পেসে আসলে লুপ থাকে না, এটিতে কেবল লেবেলে ঝাঁপ থাকে। আমার কাছে কেবল তিনটি বিকল্প হ'ল: 1. নিঃশর্ত একটি নির্দিষ্ট লেবেলে ঝাঁপ দাও; ২. স্ট্যাকের শীর্ষটি 0 হলে একটি নির্দিষ্ট লেবেলে লাফ দিন; ৩. স্ট্যাকের শীর্ষটি নেতিবাচক হলে একটি নির্দিষ্ট লেবেলে ঝাঁপুন। দুর্ভাগ্যক্রমে লুপটি চালিয়ে যাওয়ার জন্য "লেবেল থেকে ঝাঁপ দেওয়ার জন্য ইতিবাচক" নেই। নেগেটিভের জন্য যাচাই করার আগে -1 দ্বারা গুণ করে আমি এটি সম্পাদন করতে পারি, তবে আমি সন্দেহ করি যে এটি আরও কম হবে।
কেভিন ক্রুইজসেন

1
এটি একটি নেতিবাচক মডুলাস দিয়ে করার চেষ্টা করেছিল এবং <s> 62 </s> 60 বাইট (ইয়ে) এ শেষ হয়েছিল। দেখা যাচ্ছে আপনি নেতিবাচক হিপ অ্যাড্রেসগুলিতে সঞ্চয় করতে পারবেন না (যদিও 0 কয়েকটি বাইট সংরক্ষণ করেছেন)
জো কিং






2

ফোর্থ (গফোর) , 34 বাইট

: f 1 begin 1+ 2dup mod 0= until ;

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

ব্যাখ্যা

  1. ইটারেটের পূর্ণসংখ্যা 2 থেকে শুরু হয়
  2. থামুন এবং ফিরে আসুন যখন আপনি কোনও অবশিষ্টাংশের সাথে n কে ভাগ করে দেয়

কোড ব্যাখ্যা

: f               \ Define a new word
  1               \ place a 1 on the stack (to use as a counter/index)
  begin           \ start indefinite loop
    1+ 2dup       \ increment counter and duplicate counter and prime power
    mod           \ calculate power % index
  0= until        \ end the loop if modulus is 0 (no remainder)
;                 \ end word definition




1

U + 1D414 একটি চরিত্র, তবে UTF-8 এবং UTF-16 এ এটি 4 বাইট দ্বারা প্রতিনিধিত্ব করা হয়।
রুড হেল্ডারম্যান

1
@ রুডহেল্ডারম্যান সঠিক, তবে এটি ইউটিএফ -8 বা ইউটিএফ -16 এ নয়।
Okx

1
তোমাকে দেখতে চাই পারে @RuudHelderman Neim codepage
জংহওয়ান মিন

@ জংহওয়ানমিন ধন্যবাদ; ওকেক্সের আগের নিমের সাবমিশনগুলি ব্রাউজ করে, আমি লক্ষ্য করেছি যে আমার সামান্য অজ্ঞতার প্রতিক্রিয়া প্রথম ছিল না। চতুর বৈশিষ্ট্য, তবে সুস্পষ্ট থেকে অনেক দূরে; পরোয়ানা ব্যাখ্যা (যেমন এখানে হয়েছে )। কোড-গল্ফ ট্যাগ তথ্যের উদ্ধৃতি দিয়ে : "যদি না প্রশ্নটি অক্ষর দ্বারা স্কোর করার জন্য নির্দিষ্ট না করা হয় তবে এটি বাইট দ্বারা স্কোর করা হয় it ব্যবহৃত এনকোডিংটি লিখুন।
রুড হেল্ডারম্যান

মেটা sensকমত্য অনুসারে @ রুদহেল্ডারম্যান , যদি কোনও উত্তর কোনও এনকোডিং নির্দিষ্ট করে না, এটি ভাষার ডিফল্ট এনকোডিংয়ের ক্ষেত্রে ডিফল্ট হয়। যদি এটির অস্তিত্ব না থাকে তবে এটি ইউটিএফ -8 is এই ক্ষেত্রে, নিমের একটি সংজ্ঞায়িত ডিফল্ট এনকোডিং রয়েছে, সুতরাং এটি উত্তরটির এনকোডিং বলে ধরে নেওয়া হয়, উত্তরদাতাকে যেমন ব্যাখ্যা না করে।
JangHwan মিন



1

আর , 32 26 বাইট

@ জিউজ্পে বিভিন্ন যুক্তি এবং একটি সংক্ষিপ্ত সমাধান সহ:

(x=2:(n=scan()))[!n%%x][1]

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

মূল:

numbers::primeFactors(scan())[1]

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

এটি অবশ্যই 05AB1E সমাধানের থেকে অনেক উন্নত বন্দর ।




0

পাওয়ারশেল , 31 বাইট

param($a)(2..$a|?{!($a%$_)})[0]

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

2ইনপুট থেকে একটি পরিসীমা তৈরি $aকরে, সেই উপাদানগুলিকে টেনে আনে where( ?) মডিউলো অপারেশন %শূন্যের ফলাফল দেয় !(...)(অর্থাত্, যাঁরা বিভাজক $a) এবং তার পরে এটি তারতমতমটি নেয় [0]। এটি পাইপলাইনে রেখে গেছে, আউটপুট অন্তর্ভুক্ত।


0

পার্ল 6 , 22 বাইট

{grep($_%%*,2..$_)[0]}

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

বেনামি কোড ব্লক যা ইনপুটটিতে 2 এর ব্যাপ্তির গুণনগুলি ফিল্টার করে এবং প্রথমটি প্রদান করে। আমি ^$2 টি বাইট সংরক্ষণের জন্য চেষ্টা করেছিলাম , তবে ইনপুটটি প্রাইম হওয়ার ক্ষেত্রে এটি কার্যকর হয়নি।


0

ভিজ্যুয়াল বেসিক। নেট (। নেট ফ্রেমওয়ার্ক v4.5), 123 71 বাইট

-52 বাইটস @ জো কিংকে ধন্যবাদ

Function A(n)
For i=n To 2 Step-1
A=If(n Mod i=0,i,A)
Next
End Function

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

Ungolfed:

Function A(input As Long) As Long
    For i = input To 2 Step -1
        A = If (input Mod i = 0, i, A)
    Next
End Function

ব্যাখ্যা:

iপ্রথম সংখ্যা থেকে লুপ অনুসন্ধান পিছন, এবং সমস্ত সংখ্যার এটি সমানভাবে বিভক্ত খুঁজে বের করে। যেহেতু আমরা পিছন দিকে যাচ্ছি, সবচেয়ে ছোটটি মজাদার মধ্যে সঞ্চয় করা আছে A

ভিবি আপনাকে একটি ফ্রি ভেরিয়েবল দেয় যা আপনার ফাংশনটির সাথে মেলে (আমার ক্ষেত্রে, A)। ফাংশন এক্সিকিউশন শেষে, এই ভেরিয়েবলের মানটি ফিরে আসে (একটি স্পষ্ট Returnবিবৃতি ব্যতীত) ।


1
আপনার প্রাইম চেকের কোনও দরকার নেই। একটি সংখ্যার ক্ষুদ্রতম ফ্যাক্টর (1 ব্যতীত) প্রাইম হওয়ার গ্যারান্টি রয়েছে, অন্যথায় একটি ছোট ফ্যাক্টর থাকবে
জো কিং

@ জোকিং ডি'হোহ! অবশ্যই, বিশ্বাস করতে পারি না যে আমি এটি মিস করেছি। ধন্যবাদ!
ব্রায়ান জে


0

পাইথন 3 , 47 45 44 বাইট

জাভাতে কেভিন ক্রুইজসেনের উত্তর থেকে অনুপ্রাণিত

2 3 বাইট জো কিংকে ধন্যবাদ মুছে ফেলে

lambda n:[i+1for i in range(n)if n%-~i<1][1]

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


1
আপনার পূর্বে অতিরিক্ত জায়গা রয়েছে ifএবং শর্তটি হতে পারে<1
জো কিং

1
আপনি জায়গায় বর্ধিত করে বাড়িয়ে একটি বাইট সংরক্ষণ করতে পারেনrange(n)i
জো কিং




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