प्राइम पावर से प्राइम को रिकवर करें


13

परिभाषा : एक प्रमुख शक्ति एक प्राकृतिक संख्या है जिसे प्रपत्र n n में व्यक्त किया जा सकता है जहां p एक अभाज्य संख्या है और n एक प्राकृतिक संख्या है।

कार्य : प्राइम पावर p n > 1 को देखते हुए , प्राइम पी वापस करें।

टेस्टकेस :

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

स्कोरिंग : यह । बाइट्स जीत में सबसे छोटा जवाब।


1
n1 हो सकता है?
user202729

@ user202729: 4 वें परीक्षण-मामले में n = 1
एमिग्ना

15
हो सकता है कि प्राइम पार्ट के बजाय पावर पार्ट को हासिल करना ज्यादा चुनौतीपूर्ण रहा हो । जैसा कि यह है, यह सिर्फ "सबसे कम कारक है जो 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<II%you>0एसपीएल से कम है ।


1
नौकरी के लिए सही उपकरण।
जेरेमी वीरिख

12

क्या आप सुनिश्चित हैं कि एक सूची (या []संख्या के आसपास) एक वैध आउटपुट है?
आउटगोल्फ


हुह, उस के बारे में पता नहीं था, धन्यवाद।
आउटगोल्फर

8
सोच रहे लोगों के लिए,f = push list of prime factors (no duplicates)
MCCCS

7

जावा 8, 46 39 37 बाइट्स

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

-7 बाइट्स अप्रत्यक्ष रूप से @Tsathoggua की बदौलत
-2 बाइट्स जोकिंग के लिए धन्यवाद

इसे ऑनलाइन आज़माएं।

स्पष्टीकरण:

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

बाद python3 में लुइस Mendo का जवाब है, यह लिखने के लिए संभव हो जाएगा n->{for(int i=1;++i<=n;)if(n%i<1)return i;}43 वर्ण प्राप्त करने के लिए? (मैं जावा नहीं बोलता।)
त्सथोगगुआ

@Tsathoggua जैसा कि आपके पास अभी है, वैसे नहीं, क्योंकि जावा विधियों में हमेशा रिटर्न होना चाहिए। 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बन जाएगा और , इस मामले में आवश्यक नहीं है। n2687n%n==0i<=n
केविन क्रूज़सेन

1
कैसे के बारे में 37 बाइट्स । मैं जावा के साथ पर्याप्त रूप से परिचित नहीं हूं कि यह देखने के लिए कि क्या कोई और गोल्फ हो सकता है
जो किंग

@ जोकिंग मैं आगे गोल्फ के लिए कुछ भी नहीं देखता, इसलिए -2 के लिए धन्यवाद।
केविन क्रूज़सेन

5

पायथन 3 , 36 35 बाइट्स

गणितमंदन को -1 बाइट

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
गणितमुनि


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 बाइट्स @JoKing की बदौलत

पत्र 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 होगा
जो किंग

@JoKing आह, बिल्कुल। धन्यवाद, 19 बाइट्स वहीं बच गए। :)
केविन क्रूज़सेन

आप केवल लूप कर सकते हैं यदि नहीं n%iऔर बाद में प्रिंट को कॉल करें?
जो राजा

1
@JoKing मुझे पूरा यकीन है कि नहीं। व्हॉट्सएप के पास वास्तव में लूप नहीं हैं, यह सिर्फ लेबल पर कूदता है। मेरे पास केवल तीन विकल्प हैं: 1. बिना किसी लेबल के कूदना; 2. एक निश्चित लेबल पर कूदें यदि स्टैक के शीर्ष 0 है; 3. एक निश्चित लेबल पर कूदें यदि स्टैक के शीर्ष नकारात्मक है। दुर्भाग्य से लूप जारी रखने के लिए "जंप टू लेबल पॉज़िटिव" नहीं है। मैं नकारात्मक के लिए जाँच करने से पहले इसे 1 से गुणा करके पूरा कर सकता था, लेकिन मुझे संदेह है कि यह छोटा होगा।
केविन क्रूज़सेन

1
एक नकारात्मक मापांक के साथ करने की कोशिश की और 60 बाइट्स (याय) पर समाप्त हुआ । पता चलता है कि आप नकारात्मक ढेर पते पर स्टोर नहीं कर सकते (हालांकि 0 बाइट्स के एक जोड़े को बचाया)
जो राजा






2

फोर्थ (gforth) , 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
@RuudHelderman सही है, लेकिन यह UTF-8 और UTF-16 में नहीं है।
ओकेक्स

1
@RuudHelderman आप नीम कोडपेज देखना चाह सकते हैं ।
जुंगह्वान मिन

@JungHwanMin धन्यवाद; ओकेक्स के पहले के नीम सबमिशन को ब्राउज़ करते हुए, मैंने देखा कि मेरी थोड़ी अनभिज्ञ प्रतिक्रिया पहली नहीं थी। चतुर सुविधा, लेकिन स्पष्ट से दूर; वारंट स्पष्टीकरण (जैसा यहां किया गया है )। कोड-गोल्फ टैग जानकारी उद्धृत करते हुए : "जब तक प्रश्न वर्णों द्वारा स्कोर करने के लिए निर्दिष्ट नहीं किया जाता है, तब तक यह बाइट्स द्वारा रन किया जाता है। यदि स्कोरिंग के लिए उपयोग करने के लिए वर्ण एन्कोडिंग निर्दिष्ट नहीं करता है, तो उत्तर जो यूनिकोड कोड बिंदुओं का उपयोग 0 से 255 के बाहर होना चाहिए। उपयोग किए गए एन्कोडिंग को बताएं। "
रूड हेलडरमैन

@ रुडहेल्डरमैन प्रति मेटा सर्वसम्मति , यदि कोई उत्तर एन्कोडिंग निर्दिष्ट नहीं करता है, तो यह भाषा की डिफ़ॉल्ट एन्कोडिंग के लिए चूक है। यदि वह मौजूद नहीं है, तो यह UTF-8 है। इस मामले में, नीम में एक परिभाषित डिफ़ॉल्ट एन्कोडिंग है, इसलिए इसे उत्तर के एन्कोडिंग के रूप में माना जाता है, बिना उत्तरदाता को इस तरह की व्याख्या करने के लिए।
जंगवान मिन






0

पॉवरशेल , 31 बाइट्स

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

इसे ऑनलाइन आज़माएं!

2इनपुट से एक सीमा का निर्माण करता है $a, उन तत्वों को बाहर निकालता है where( ?) मोडुलो ऑपरेशन का %परिणाम एक शून्य में होता है !(...)(यानी, जो कि विभाजक हैं $a), और फिर सबसे छोटा [0]एक लेता है। यह पाइपलाइन पर छोड़ दिया गया है, आउटपुट निहित है।


0

पर्ल 6 , 22 बाइट्स

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

इसे ऑनलाइन आज़माएं!

बेनामी कोड ब्लॉक जो इनपुट के लिए 2 की सीमा के कारकों को फिल्टर करता है और पहले वाला रिटर्न देता है। मैंने ^$2 बाइट्स को बचाने के लिए उपयोग करने की कोशिश की , लेकिन यह उस मामले में काम नहीं किया जो इनपुट प्रधान था।


0

Visual Basic .NET (.NET फ्रेमवर्क v4.5), 123 71 बाइट्स

@52 राजा को -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

VB आपको एक मुफ्त चर देता है जो आपके फ़ंक्शन नाम (मेरे मामले में A) से मेल खाता है । फ़ंक्शन निष्पादन के अंत में, उस चर में मान लौटाया जाता है (एक स्पष्ट Returnकथन को छोड़कर) ।


1
आपको मुख्य जांच की आवश्यकता नहीं है। एक संख्या का सबसे छोटा कारक (1 से अधिक) एक प्रमुख होने की गारंटी है, अन्यथा एक छोटा कारक होगा
Jo King

@ जोकिंग डी'ओह! बेशक, विश्वास नहीं होता कि मैं चूक गया। धन्यवाद!
ब्रायन जे


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जगह में वृद्धि कर सकते हैं
जो किंग




हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.