क्या यह स्फेनिक संख्या है?


29

स्फेनिक नंबर एक संख्या है जो ठीक तीन अलग-अलग अपराधों का उत्पाद है। पहले कुछ स्फेनिक संख्याएँ हैं 30, 42, 66, 70, 78, 102, 105, 110, 114। यह OEIS में अनुक्रम A007304 है।

आपका कार्य:

यह निर्धारित करने के लिए एक प्रोग्राम या फ़ंक्शन लिखें कि क्या एक इनपुट पूर्णांक एक स्फेनिक संख्या है।

इनपुट:

0 और 10 ^ 9 के बीच का पूर्णांक, जो स्फेनिक नंबर हो सकता है या नहीं भी हो सकता है।

आउटपुट:

एक सत्य / झूठे मूल्य से संकेत मिलता है कि इनपुट स्फेनिक नंबर है या नहीं।

उदाहरण:

30  -> true
121 -> false
231 -> true
154 -> true
4   -> false
402 -> true
79  -> false
0   -> false
60  -> false
64  -> false
8   -> false
210 -> false

स्कोरिंग:

यह , बाइट्स जीत में सबसे छोटा कोड है।


है 60एक sphenic संख्या? 2 × 2 × 3 × 5
आउटगोल्फ जूल

1
@ErictheOutgolfer 3 विशिष्ट प्राइम का उत्पाद नहीं है, हालांकि, यह 3 अलग और 1 डुप्लिकेट प्राइम का उत्पाद है।
R

1
@ राइकर मुझे वास्तव में यकीन नहीं है अगर "3 अलग-अलग primes" का अर्थ है "3 primes जो सभी विशिष्ट हैं" या "जब विशिष्ट हैं तो 3 primes रहना चाहिए"। संपादित करें: ओह, मैं देख रहा हूँ, 60एक स्फेनिक संख्या नहीं है। (ओपी स्पष्टीकरण के लिए इंतजार कर रहे हैं)
निकोल निकोल

@EriktheOutgolfer sphenic नंबरों की परिभाषा के अनुसार, 60 उनमें से एक नहीं है। मुझे नहीं पता कि इस चुनौती के लिए 60 वैध है या नहीं।
गेहूं जादूगर

@WheatWizard, 60 एक स्फेनिक संख्या नहीं है (उदाहरण के लिए आउटपुट / वापसी मिथ्या)।
ग्रीफॉन -

जवाबों:


7

ब्रेकीलॉग , 6 3 बाइट्स

ḋ≠Ṫ

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

व्याख्या

ḋ        The prime factorization of the Input…
 ≠       …is a list of distinct elements…
  Ṫ      …and there are 3 elements

2
और फिर एक भाषा है जिसमें बिल्टइन जैसा है
आउटगोल्फ जूल

और बिल्टिन भी।
जकार्इ

1
@ Zacharý वास्तव में एक अंतर्निहित विधेय नहीं है; यह एक अंतर्निर्मित चर है: 3 चर तत्वों की एक सूची। यह कई अलग-अलग चुनौतियों में एक काफी उपयोगी पूर्व-विवश चर है।
घातक

सबसे कम उत्तर पर बधाई।
ग्रिफॉन - मोनिका

11

बैश, 43 बाइट्स

factor $1|awk '{print $2-$3&&$3-$4&&NF==4}'

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

कमांड लाइन तर्क, आउटपुट 0या 1स्टडआउट के माध्यम से इनपुट ।

काफी हद तक आत्म-व्याख्यात्मक; factorयह जांचने के लिए आउटपुट देता है कि पहले और दूसरे कारक अलग-अलग हैं, दूसरे और तीसरे अलग हैं (वे क्रमबद्ध क्रम में हैं, इसलिए यह पर्याप्त है), और चार फ़ील्ड हैं (इनपुट संख्या और तीन कारक)।


11

MATL , 7 बाइट्स

_YF7BX=

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

व्याख्या

_YF   % Implicit input. Nonzero exponents of prime-factor decomposition
7     % Push 7
B     % Convert to binary: gives [1 1 1] 
X=    % Is equal? Implicit display

@ मैं इसके बारे में सोच रहा था, लेकिन फिर झूठा ouput बदसूरत हो जाता है (या तो त्रुटि के साथ खाली या कुछ शून्य के साथ एक सरणी)। यकीन नहीं तो मुझे करना चाहिए ...
लुइस मेंडू

4
X=सबसे उदास बिल्टइन है जिसे मैंने कभी देखा है।
आउटगॉल्फ जूल

9

सी, 88 78 126 58 77 73 73 + 4 ( lm) = 77 बाइट्स

l,j;a(i){for(l=1,j=0;l++<i;fmod(1.*i/l,l)?i%l?:(i/=l,j++):(j=9));l=i==1&&j==3;}

असंबद्ध टिप्पणी की व्याख्या:

look, div; //K&R style variable declaration. Useful. Mmm.

a ( num ) { // K&R style function and argument definitions.

  for (
    look = 1, div = 0; // initiate the loop variables.
    look++ < num;) // do this for every number less than the argument:

      if (fmod(1.0 * num / look, look))
      // if num/look can't be divided by look:

        if( !(num % look) ) // if num can divide look
          num /= look, div++; // divide num by look, increment dividers
      else div = 9;
      // if num/look can still divide look
      // then the number's dividers aren't unique.
      // increment dividers number by a lot to return false.

  // l=j==3;
  // if the function has no return statement, most CPUs return the value
  // in the register that holds the last assignment. This is equivalent to this:
  return (div == 3);
  // this function return true if the unique divider count is 3
}

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


1
i*1.0/lकलाकारों के बजाय नाव पर विचार करें । (और जब से l, jवे वैश्विक हैं , उन्हें 0 पर मुफ्त में शुरू किया जाता है, तो आपको यह करने की ज़रूरत नहीं है कि यदि फ़ंक्शन केवल एक बार कहा जाता है। निश्चित नहीं है कि इसके लिए क्या नियम है।)
Mat


5

सीजेएम , 11 बाइट्स

rimFz1=7Yb=

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

व्याख्या

मेरे MATL उत्तर के आधार पर।

ri    e# Read integer
mF    e# Factorization with exponents. Gives a list of [factor exponent] lists
z     e# Zip into a list of factors and a list of exponents
1=    e# Get second element: list of exponents
7     e# Push 7
Yb    e# Convert to binary: gives list [1 1 1]
=     e# Are the two lists equal? Implicitly display


4

भूसी , 6 बाइट्स

≡ḋ3Ẋ≠p

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

स्फेनिक संख्या के लिए 1 और अन्यथा 0 लौटाता है।

व्याख्या

≡ḋ3Ẋ≠p    Example input: 30
     p    Prime factors: [2,3,5]
   Ẋ≠     List of absolute differences: [1,2]
≡         Is it congruent to...       ?
 ḋ3           the binary digits of 3: [1,1]

अंतिम मार्ग में, दो सूचियों के बीच समानता का अर्थ है समान लंबाई और समान वितरण सत्य / मिथ्या मूल्यों का होना। इस मामले में हम जाँच रहे हैं कि हमारा परिणाम दो सत्य (अर्थात शून्य) मानों से बना है।


4

मैथेमेटिका, 31 बाइट्स

SquareFreeQ@#&&PrimeOmega@#==3&

चूंकि आप पहले से ही वर्गफ्री-नेस के लिए परीक्षण कर रहे हैं, PrimeNuवैसे ही करेंगे PrimeOmegaऔर छोटा होगा।
मार्क एस।





2

जे , 15 बाइट्स

7&(=2#.~:@q:)~*

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

व्याख्या

7&(=2#.~:@q:)~*  Input: integer n
              *  Sign(n)
7&(         )~   Execute this Sign(n) times on n
                 If Sign(n) = 0, this returns 0
          q:       Prime factors of n
       ~:@         Nub sieve of prime factors
    2#.            Convert from base 2
   =               Test if equal to 7

~ और # का बहुत अच्छा उपयोग। एक विकल्प हो सकता है (7 & (= #। @ ~: @Q:) ~ *) जो मुझे पढ़ने में थोड़ा आसान लगता है, लेकिन छोटा नहीं है।
बॉब



2

पायथन 3 , 54 53 बाइट्स

lambda n:sum(1>>n%k|7>>k*k%n*3for k in range(2,n))==6

1 बाइट को बंद करने के लिए @xnor को धन्यवाद!

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


आप k*k%nइसके बजाय चौकोरहाइनेस की जांच कर सकते हैंn%k**2
xnor

सही है, मुझे केवल एक विफलता चाहिए। धन्यवाद!
डेनिस

2

सी, 91 102 बाइट्स, सही (फिर से), गोल्फ, और इस बार असली के लिए परीक्षण किया गया:

<strike>s(c){p,f,d;for(p=2,f=d=0;p<c&&!d;){if(c%p==0){c/=p;++f;if(c%p==0)d=1;}++p;}c==p&&f==2&&!d;}</strike>
s(c){int p,f,d;for(p=2,f=d=0;p<c&&!d;){if(c%p==0){c/=p;++f;if(c%p==0)d=1;}++p;}return c==p&&f==2&&!d;}

/ * यह 93 बाइट्स में भी काम करता है, लेकिन जब से मैं डायनामिक वैरिएबल्स पर डिफ़ॉल्ट इंट प्रकार को छोड़कर मानक नियमों के बारे में भूल गया, और असाइनमेंट के बिना निहित रिटर्न मानों की अनुमति नहीं देने के बारे में, मैं इसे लेने नहीं जा रहा हूं:

p,f,d;s(c){for(p=2,f=d=0;p<c&&!d;){if(c%p==0){c/=p;++f;if(c%p==0)d=1;}++p;}p=c==p&&f==2&&!d;}

(किसने कहा कि मुझे C के बारे में कुछ भी पता है? ;-)

यहाँ टिप्पणियों में शेल स्क्रिप्ट के साथ परीक्षण फ्रेम है:

/* betseg's program for sphenic numbers from 
*/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <math.h> /* compile with -lm */

/* l,j;a(i){for(l=1,j=0;l<i;i%++l?:(i/=l,j++));l=i==1&&j==3;} */
#if defined GOLFED
l,j;a(i){for(l=1,j=0;l++<i;fmod((float)i/l,l)?i%l?:(i/=l,j++):(j=9));l=i==1&&j==3;}
#else 
int looker, jcount;
int a( intval ) {
  for( looker = 1, jcount = 0; 
    looker++ < intval; 
    /* Watch odd intvals and even lookers, as well. */
    fmod( (float)intval/looker, looker )  
      ? intval % looker /* remainder? */
        ? 0 /* dummy value */
        : ( inval /= looker, jcount++ /* reduce the parameter, count factors */ ) 
      : ( jcount = 9 /* kill the count */ ) 
  )
    /* empty loop */;
  looker = intval == 1 && jcount == 3; /* reusue looker for implicit return value */
}
#endif

/* for (( i=0; $i < 100; i = $i + 1 )) ; do echo -n at $i; ./sphenic $i ; done */

मैंने अपने संस्करण के लिए betseg का पिछला उत्तर उधार लिया है।

यह betseg के एल्गोरिथ्म का मेरा संस्करण है, जिसे मैंने अपने समाधान के लिए प्राप्त किया है:

/* betseg's repaired program for sphenic numbers
*/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int sphenic( int candidate )
{
  int probe, found, dups;
  for( probe = 2, found = dups = 0; probe < candidate && !dups; /* empty update */ ) 
  { 
    int remainder = candidate % probe;
    if ( remainder == 0 ) 
    {
      candidate /= probe;
      ++found;
      if ( ( candidate % probe ) == 0 )
        dups = 1;
    }
    ++probe;
  } 
  return ( candidate == probe ) && ( found == 2 ) && !dups;
}

int main( int argc, char * argv[] ) { /* Make it command-line callable: */
  int parameter;
  if ( ( argc > 1 ) 
       && ( ( parameter = (int) strtoul( argv[ 1 ], NULL, 0 ) ) < ULONG_MAX ) ) {
    puts( sphenic( parameter ) ? "true" : "false" );
  }
  return EXIT_SUCCESS; 
}

/* for (( i=0; $i < 100; i = $i + 1 )) ; do echo -n at $i; ./sphenic $i ; done */

क्या यह सवाल का जवाब देता है, अब?
जोएल रीस

हाँ यह करता है। इसे betseg के उत्तर से लिंक करने के लिए डालें [betseg's answer](https://codegolf.stackexchange.com/a/135203/65836):। यदि आप चाहें तो इसे संपादित करने के सुझाव के लिए आप उनके उत्तर पर भी क्लिक कर सकते हैं, जिसमें स्पष्टीकरण भी शामिल होगा - इस बात पर कोई वादा नहीं कि यह स्वीकृत होगा या नहीं।
स्टीफन

अब मैं यहाँ हूँ, और मैंने अपना कार्यक्रम तय किया, यह अभी 87 बाइट्स पर है; लेकिन आपका कार्यक्रम भी अच्छा लगता है।
सुपारी

@betseg दिलचस्प है कि आपने इस बार फ्लोटिंग पॉइंट का इस्तेमाल किया। ओह, और मुझे अपने एल्गोरिथ्म को उधार देने के लिए धन्यवाद। ;-)
जोएल रीस

@JoelRees मैंने अपने जवाब में स्पष्टीकरण जोड़ा, आपके उत्तर में भी एक समस्या है जो मुझे लगता है? यह सही ढंग से काम नहीं करता है: इसे ऑनलाइन आज़माएं
दांव


1

जावास्क्रिप्ट (ईएस 6), 87 बाइट्स

n=>(a=(p=i=>i>n?[]:n%i?p(i+1):[i,...p(i,n/=i)])(2)).length==3&&a.every((n,i)=>n^a[i+1])

उदाहरण कोड स्निपेट:

f=
n=>(a=(p=i=>i>n?[]:n%i?p(i+1):[i,...p(i,n/=i)])(2)).length==3&&a.every((n,i)=>n^a[i+1])

for(k=0;k<10;k++){
  v=[30,121,231,154,4,402,79,0,60,64][k]
  console.log(`f(${v}) = ${f(v)}`)
}


1

अजगर 2 , 135 121 बाइट्स

  • लंबे समय से इसमें सभी प्रक्रियाएं शामिल हैं: प्राइम-चेक, प्राप्त-प्राइम कारक और चेक स्फ़ेयर संख्या की स्थिति।
lambda x:(lambda t:len(t)>2and t[0]*t[1]*t[2]==x)([i for i in range(2,x)if x%i<1and i>1and all(i%j for j in range(2,i))])

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


1

पायथन 2 , 59 बाइट्स

lambda x:6==sum(5*(x/a%a+x%a<1)+(x%a<1)for a in range(2,x))

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


यह 48 जैसी झूठी सकारात्मकता देता है। मैं एक ही बात की कोशिश कर रहा था।
xnor

@xnor फिक्स्ड, लेकिन बाइट्स की कीमत पर।
गेहूं जादूगर

1

जे, 23 बाइट्स

0:`((~.-:]*.3=#)@q:)@.*

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

8 और 0 को संभालने से मूल रूप से यह बर्बाद हो गया ...

q: आपको सभी प्रमुख कारक प्रदान करता है, लेकिन 0. नहीं संभालता है। इसके बाकी हिस्सों का कहना है कि "अद्वितीय कारकों को कारकों के बराबर होना चाहिए" और "उनमें से संख्या 3 होनी चाहिए"


यह इनपुट के लिए विफल है60
कॉनर ओ'ब्रायन

@ ConorO'Brien धन्यवाद मेरा संपादन देखें - फिक्सिंग 60 में मदद की , लेकिन मुझे एहसास हुआ कि मैं भी 0 को सही ढंग से नहीं संभाल रहा था, और बाइट को दोगुना से अधिक संभाल रहा था
योना

आखिरी एक मेरा मूल विचार था, और वह इसके लिए विफल हो गया 8
कॉनर ओ'ब्रायन

मेरे पास (6=]#@,~.)@q:एक संभावित समाधान के रूप में है
कॉनर ओ'ब्रायन

@ ConorO'Brien के बारे में अच्छी बात है। 8. आपके लिए 0 विफल रहेगा, हालांकि।
योना

1

जाप , 14 बाइट्स

k
k@è¥X ÉÃl ¥3

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


@ ओलिवर एक फ़ंक्शन को Number.k()पास करने में परिणाम होगा , जिसका कोई प्रभाव नहीं होगा और बस यह जांचना होगा कि इनपुट में 3 प्रमुख कारक हैं, न कि 3 अलग-अलग प्रमुख कारक। इसका मतलब होगा 8(तीन प्रमुख कारकों के साथ :) A0073042, 2, 2 में नहीं होने के बावजूद पास होगा
जस्टिन मेरिनर

आह, तुम सही हो। मैं सिर्फ टेस्ट केसों से जा रहा था।
ओलिवर

@ ओलिवर हाँ, कि वास्तव में मुझे इस समाधान पर काम करते समय एक पाश के लिए फेंक दिया। मैंने सिर्फ 8इस कारण से परीक्षण के मामलों में जोड़ा ।
जस्टिन मैरिनर


1

VB.NET (.NET 4.5), 104 बाइट्स

Function A(n)
For i=2To n
If n Mod i=0Then
A+=1
n\=i
End If
If n Mod i=0Then A=4
Next
A=A=3
End Function

मैं VB की सुविधा का उपयोग कर रहा हूँ जहाँ फ़ंक्शन नाम भी एक चर है। निष्पादन के अंत में, चूंकि कोई रिटर्न स्टेटमेंट नहीं है, इसलिए यह 'फ़ंक्शन' के मान को पारित करेगा।

अंतिम सी-आधारित भाषाओं में A=A=3सोचा जा सकता है return (A == 3)

2 से शुरू होता है, और पुनरावृत्तियों को खींचता है। चूंकि मैं सबसे छोटे अपराधों से शुरू कर रहा हूं, इसलिए इसे एक समग्र संख्या से विभाजित नहीं किया जा सकता है।

उसी प्राइम द्वारा विभाजित करने के लिए दूसरी बार कोशिश करेंगे। यदि यह है (जैसे कि 60 को 2 से दो बार कैसे विभाजित किया जाता है), तो यह 4 तक की संख्या की गणना करेगा (अधिकतम एक स्फेनिक संख्या के लिए अनुमत)।

यह ऑनलाइन की कोशिश करो!


1

डायलॉग एपीएल, 51 49 48 46 45 43 बाइट्स

1∊((w=×/)∧⊢≡∪)¨(⊢∘.,∘.,⍨){⍵/⍨2=≢∪⍵∨⍳⍵}¨⍳w←⎕

इसे ऑनलाइन आज़माएं!(संशोधित तो यह TryAPL पर चल सकता है)

मैं एक को प्रस्तुत करना चाहता था जो dfns नाम स्थान पर भरोसा नहीं करता है, भले ही यह लंबा हो


1

जे, १५ १४ 19 बाइट्स

पिछला प्रयास: 3&(=#@~.@q:)~*

वर्तमान संस्करण: (*/*3=#)@~:@q: ::0:

यह काम किस प्रकार करता है:

(*/*3=#)@~:@q: ::0:  Input: integer n
               ::0:  n=0 creates domain error in q:, error catch returns 0
            q:       Prime factors of n
         ~:@         Nub sieve of prime factors 1 for first occurrence 0 for second
(*/*3=#)@            Number of prime factors is equal to 3, times the product across the nub sieve (product is 0 if there is a repeated factor or number of factors is not 3)

यह 0, 8 और 60 मामलों के लिए गुजरता है जो पिछले संस्करण में नहीं था।


1
क्यों नहीं 3 = # ~ .q: 7characters के लिए? J सत्र से 3 = # ~ .q: 30 ==> 1 और 3 = # ~ .q: 20 ==> 0
रिचर्ड डोनोवन

रिचर्ड, आपका सुझाव n = 60 के लिए गलत सकारात्मक देता है और n = 0 के लिए एक डोमेन त्रुटि बनाता है, लेकिन मेरा पिछला संस्करण n = 60 के लिए भी विफल रहा। आपकी टिप्पणी ने मुझे एक सही समाधान के लिए प्रयास करने के लिए प्रेरित किया!
बॉब

0

गणितज्ञ, ६६ ५ by बाइट्स

Length@#1==3&&And@@EqualTo[1]/@#2&@@(FactorInteger@#)&

एक अनाम फ़ंक्शन को परिभाषित करता है।

है पक्षांतरित

व्याख्या

FactorIntegerकारकों और उनके प्रतिपादकों के जोड़े की एक सूची देता है। जैसे FactorInteger[2250]=={{2,1},{3,2},{5,3}}। यह उपयोग में आसानी के लिए प्रत्यारोपित किया जाता है और फ़ंक्शन को खिलाया जाता है Length@#1==3&&And@@EqualTo[1]/@#2&। पहला भाग, Length@#1==3जाँच करता है कि 3 अद्वितीय कारक हैं, जबकि दूसरा, And@@EqualTo[1]/@#2जाँचता है कि सभी घातांक 1 हैं।


0

PHP, 66 बाइट्स:

for($p=($n=$a=$argn)**3;--$n;)$a%$n?:$p/=$n+!++$c;echo$c==7&$p==1;

ऑनलाइन के साथ पाइप के रूप में चलाएं -nRया इसे आज़माएं

के लिए अनंत लूप 0; ठीक करने $n&&से पहले डालें --$n

टूट - फूट

for($p=($n=$a=$argn)**3;    # $p = argument**3
    --$n;)                  # loop $n from argument-1
    $a%$n?:                     # if $n divides argument
        $p/=$n                      # then divide $p by $n
        +!++$c;                     # and increment divisor count
echo$c==7&$p==1;            # if divisor count is 7 and $p is 1, argument is sphenic

उदाहरण के
तर्क = 30:
प्रधानमंत्री कारक हैं 2, 3और 5
अन्य divisors हैं 1, 2 * 3 = 6, 2 * = 5 10और 3 * 5 = 15
अपने उत्पाद: 1*2*3*5*6*10*15है 27000==30**3


0

पायथन 99 बाइट्स

def s(n):a,k=2,0;exec('k+=1-bool(n%a)\nwhile not n%a:n/=a;k+=10**9\na+=1\n'*n);return k==3*10**9+3

पहला सबमिशन। मुझे माफ कर दो अगर मैंने कुछ गलत किया है। किंदा मूर्खतापूर्ण, के कारकों की संख्या को गिनता है n, और फिर nप्रत्येक (10 ** 9 को जोड़कर) समय की संख्या को विभाजित किया जाता है।

मुझे पूरा यकीन है कि ~ 10-20 पात्रों को काटने के कुछ आसान तरीके हैं, लेकिन मैंने नहीं किया।

इसके अलावा यह है intractably 10 ** 9 में धीमी गति से। ठीक किया जा सकता है बदलकर '...a+=1\n'*nकरने के लिए '...a+=1\n'*n**.5, जैसा कि हम केवल के वर्गमूल के जाने की जरूरत है n

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