Numeri poveri di fattori


20

Se un numero intero positivo ha (rigorosamente) meno fattori primi (senza contare le molteplicità) rispetto al suo successore e al suo predecessore, lo chiameremo un numero mediocre .N>2

In altre parole, e ω ( N ) < ω ( N + 1 ) , dove ω ( N ) è il numero di fattori primi uniche di N .ω(N)<ω(N1)ω(N)<ω(N+1)ω(N)N

Compito

È possibile scegliere tra i seguenti formati I / O:

  • Prendi un numero intero e visualizza il numero n- esente da fattori. Nel caso in cui si scelga questo, N può essere 0 o 1 indicizzato.NNthN
  • Prendi un intero positivo e genera i primi numeri poveri del fattore N.NN
  • Stampa la sequenza indefinitamente.

Puoi prendere input e fornire output attraverso qualsiasi metodo standard , in qualsiasi linguaggio di programmazione , tenendo presente che queste scappatoie sono vietate per impostazione predefinita. Questo è il golf del codice, quindi vince il contributo più breve che rispetta le regole.

Non includerò casi di test separati, perché i metodi di competizione sono diversi, ma puoi fare riferimento ai primi 100 termini di questa sequenza, che è OEIS A101934 :

11, 13, 19, 23, 25, 27, 29, 37, 41, 43, 47, 49, 53, 59, 61, 64, 67, 71, 73, 79, 81, 83, 89, 97, 101, 103, 107, 109, 113, 121, 125, 131, 137, 139, 149, 151, 155, 157, 163, 167, 169, 173, 179, 181, 191, 193, 197, 199, 211, 221, 223, 227, 229, 233, 239, 241, 243, 251, 259, 263, 265, 269, 271, 277, 281, 283, 289, 293, 307, 309, 311, 313, 317, 331, 337, 341, 343, 347, 349, 353, 359, 361, 365, 367, 371, 373, 379, 383, 389, 397, 401, 407, 409, 419, 421, 431, 433, 439, 441, 443

Ad esempio, verifica in questa sequenza perché ω ( 25 ) = 1 (5), ω ( 26 ) = 2 (2 e 13) e ω ( 24 ) = 2 (2 e 3), quindi ω ( 25 ) < ω ( 24 ) e ω ( 25 ) < ω ( 26 ) .25ω(25)=1ω(26)=2ω(24)=2ω(25)<ω(24)ω(25)<ω(26)


Posso generare un lead n = prima di ogni valore?
Steadybox

@Steadybox Sketchy, ma lo permetterò: - /
Mr. Xcoder

L'ho aggiunto come versione alternativa.
Steadybox

Risposte:


7

Brachylog , 21 byte

⟨+₁≡-₁⟩{ḋdl}ᵐ⌋>~↰₂?ẉ⊥

Provalo online!

Stampa all'infinito.

Spiegazione

⟨+₁≡-₁⟩                  Fork: The output of the fork is [Input + 1, Input -1]
       {   }ᵐ            Map:
        ḋdl                (predicate 2) the output is the length of the prime decomposition
                           of the input with no duplicates
             ⌋           Take the minimum result of that map
              >          This minimum is bigger than…
               ~↰₂?      …the output of predicate 2 with Input as input
                  ?ẉ     Write Input followed by a new line if that's the case
                    ⊥    False: backtrack and try another value for Input

5

Gelatina , 13 12 byte

Cr~ÆvÐṂN⁼Wø#

Stampa i primi numeri n poveri di fattore.

Provalo online!

Come funziona

Cr~ÆvÐṂN⁼Wø#  Main link. No arguments.

          ø   Wrap the links to the left into a chain and begin a new chain.
           #  Read an integer n from STDIN and call the chain to the left with
              arguments k = 0, 1, 2, ... until n of them return a truthy value.
              Return those n values of k as an array.
C                 Complement; yield -k+1.
  ~               Bitwise NOT; yield -k-1.
 r                Range; yield [-k+1, -k, -k-1].
     ÐṂ           Yield those elements of [-k+1, -k, -k-1] for which the link to
                  the left returns the minimal value.
   Æv                 Count the number of unique prime factors.
                      Note that, for a negative argument, Æv counts -1 as well, and
                      0 is counted as a/the factor of 0. Negating the the arguments
                      eliminates the edge case 1 (no factors), which would be a
                      false positive otherwise.
                  For a factor-poor number, this yields [-k].
       N          Take the negatives of the resulting integers.
         W        Wrap; yield [k].
        ⁼         Test the results to both sides for equality.

5

Python 2 , 123 119 byte

q=lambda n:sum(n%i<all(i%j for j in range(2,i))for i in range(2,n+1))
i=2
while 1:
 i+=1
 if q(i-1)>q(i)<q(i+1):print i

Provalo online!


@FryAmTheEggman grazie! Anche se non ho usato il tuo suggerimento, mi ha ispirato un altro approccio che ha salvato 4 byte: D
Rod

Bello! Ero sicuro che ci fosse un modo per evitare due brutti lambda :)
FryAmTheEggman

4

MATL , 26 24 22 byte

`T@3:q+YFg!sdZSd0>?@QD

Stampa la sequenza indefinitamente.

Provalo online!

Spiegazione

`         % Do...while loop
  T       %   Push true. Will be used as loop condition
  @       %   Push (1-based) iteration index, k 
  3:q     %   Push [1 2 3] minus 1, that is, [0 1 2]
  +       %   Add, element-wise. Gives [k k+1 k+2]
  YF      %   Exponents of prime-factor decomposition. Gives a 3-row matrix
  g       %   Convert to logical: non-zero numbers become 1
  !s      %   Transpose, sum of each column. Gives a row vector of 3 elements, 
          %   which are the number of unique prime factors of k, k+1 and k+2 
  d       %   Consecutive differences. Gives a row vector of 2 elements
  ZS      %   Sign: replaces each number by -1, 0 or 1
  d       %   Consecutive difference. Gives a single number
  0>      %   Is it positive?
  ?       %   If so
    @Q    %     Push k+1
    D     %     Display
          %   End (implicit)
          % End (implicit). The stack contains true, which (is consumed and)
          % causes an infinite loop

3

Buccia , 22 byte

f(ΠtSM<←ṙ1mȯLup§…←→)tN

Stampa la sequenza indefinitamente, provala online o visualizza la prima N !

In alternativa §oΛ>←t potrebbe essere usato invece di ΠtSM<←.

Spiegazione

f(                  )tN  -- filter the tail of the naturals ([2,3…]) by:
  ΠtSM<←ṙ1m(Lup)§…←→     -- | takes a number as argument, example 11
                §…       -- | range of..
                  ←      -- | | the argument decremented (10)
                   →     -- | | to the argument incremented (12)
                         -- | : [10,11,12]
          m(   )         -- | map the following (example on 12) ..
              p          -- | | prime factors: [2,2,3]
             u           -- | | deduplicate: [2,3]
            L            -- | | length: 2
                         -- | : [2,1,2]
        ṙ1               -- | rotate by 1: [1,2,2]
    SM<                  -- | map the function (< X) over the list where X is ..
       ←                 -- | | the first element (1)
                         -- | : [0,1,1]
   t                     -- | tail: [1,1]
  Π                      -- | product: 1
                         -- : [11,13,19,23,25,27,29…

3

Pyth , 14 byte

.f!-.ml{Pb}tZh

Provalo qui!

Inizialmente era un suggerimento sulla risposta di Dopapp , ma loro mi detto di pubblicarlo separatamente.

Come funziona?

.f! -. ml {Pb} tZh | Programma completo. Riceve input da STDIN, invia il primo N a STDOUT.

.f | (var: Z) Emette i primi N valori che soddisfano il predicato.
          } tZh | Crea l'elenco [Z - 1, Z, Z + 1].
    .m | (var: b) Accetta gli elementi con un valore di funzione minimo.
        Pb | Fattori primi di b.
      l {| Deduplica, ottieni lunghezza.
               | Per un numero povero di fattori, questo si rende avvolto in un singleton.
   - | Rimuovi Z da quello.
  ! | Negazione logica.

3

Haskell, 105 86 byte

Grazie a @Wheat Wizard, @Bruce Forte e @Laikoni per aver salvato 19 byte.

[n|n<-[2..],d n<d(n-1),d n<d(n+1)] d x=[1|n<-[1..x],x`rem`n<1,all((>0).rem n)[2..n-1]]


quando si usa rem ==0e /=0può essere ricacciato con <1e >0rispettivamente.
Wheat Wizard

Non è necessario per let, definire dcome funzione ausiliaria va bene (vedere la guida alle regole del golf ). Inoltre sumpuò essere omesso, il confronto funziona allo stesso modo sugli elenchi. 86 byte: provalo online!
Laikoni,

2

Ottava ,  87   83  79 byte

Grazie a Quack @Cows per il salvataggio di un byte e grazie a @Luis Mendo per il salvataggio di tre sei byte!

f=@(n)nnz(unique(factor(n)));n=9;while++n if[f(n-1) f(n+1)]>f(n)disp(n);end;end

Stampa la sequenza indefinitamente.

Provalo online!

73 byte con anticipo n =prima di ogni valore:

f=@(n)nnz(unique(factor(n)));n=9;while++n if[f(n-1) f(n+1)]>f(n)n end;end

Provalo online!


Penso che la funzione fpossa diventare f=@(n)length(unique(factor(n)))per un byte in meno.
Kritixi Lithos

2

05AB1E , 14 13 byte

Emette l'ennesimo numero scarso di fattore (1 indicizzato)

µ3LN+Íf€gÀć›P

Provalo online!

Spiegazione

µ                 # loop over N (1,2,3, ...) until counter equals input
 3L               # push the range [1,2,3]
   N+             # add current N
     Í            # subtract 2
      f           # get unique prime factors of each
       €g         # get length of each factor list
         À        # rotate left
          ć       # extract the head
           ›      # check if the remaining elements are strictly greater
            P     # product
                  # if 1, increment counter
                  # implicitly output final N

1
Stavo per suggerire di passare a µ, quindi suppongo che sottolineerò la mia alternativa: N<N>Ÿposso sostituire 3LN+Í, se questo aiuta.
Mr. Xcoder,

@ Mr.Xcoder: Allo stesso modo, ®XŸN+funziona anche. O 0®X)N+nel qual caso Ànon sarebbe necessario. Sfortunatamente finiscono tutti allo stesso numero di byte.
Emigna,

1

Pyth, 30 25 byte

#=hTI&>l{PhTKl{PT>l{PtTKT

Questo è il mio primo vero golf Pyth, quindi ogni commento è molto apprezzato.

Un grande grazie a Xcoder!

Spiegazione

#                         | Loop until error
 =hT                      | Add one to T (initially 10)
    I&                    | If both...
      >l{PhTKl{PT         | The number of unique prime factors of T+1 is greater than that of T (store in K) 
                 >l{PtTK  | And the number of unique prime factors of T-1 is greater than K (from before)
                        T | Then implicitly print T

TIO .


14 byte: .f!-.ml{Pb}tZh(stampa la prima n) ( .frecupera i primi n valori che soddisfano una condizione [1,2,3,...]e utilizza una variabile Z, }tZhgenera l'intervallo intero [Z - 1 ... Z + 1], .mrestituisce l'elenco di elementi con valore di funzione minimo (con b), l{Pbottiene il conteggio di divisori distinti, -scarta Zdalla lista, !applica la negazione logica)
Mr. Xcoder

1
@ Mr.Xcoder, wow non credo che l'avrei ottenuto presto! Non diresti che merita la sua risposta?
Daniel

@Dopapp Ok, l'ho pubblicato separatamente. +1 Benvenuto nel golf di Pyth!
Mr. Xcoder,

25 byte usando il tuo approccio.
Mr. Xcoder,

No. hè +1, tè -1, mentre Kè una variabile che viene assegnata senza =. Ad esempio, K4assegna Ka 4. È quindi possibile accedervi utilizzando K.
Mr. Xcoder,

1

JavaScript (ES6), 94 byte

Restituisce l'ennesimo numero scarso del fattore, indicizzato 0.

f=(i,n=9)=>(P=(n,i=k=1)=>++k>n?0:n%k?P(n,1):i+P(n/k--,0))(n)>P(++n)&P(n)<P(n+1)&&!i--?n:f(i,n)

Provalo online!

Come?

Definiamo innanzitutto la funzione P () che restituisce il numero di fattori primi unici di un dato intero.

P = (                   // P = recursive function taking:
  n,                    //   n = input number to test
  i =                   //   i = flag to increment the number of prime factors
  k = 1                 //   k = current divisor
) =>                    //
  ++k > n ?             // increment k; if k is greater than n:
    0                   //   stop recursion
  :                     // else:
    n % k ?             //   if k is not a divisor of n:
      P(n, 1)           //     do a recursive call with n unchanged and i = 1
    :                   //   else:
      i +               //     add i and
      P(n / k--, 0)     //     do a recursive call with n / k and i = 0; decrement k

Il codice di wrapping ora si legge come:

f = (                   // given:
  i,                    //   i = input index
  n = 9                 //   n = counter
) =>                    //
  P(n) > P(++n) &       // increment n; if P(n - 1) is greater than P(n)
  P(n) < P(n + 1) &&    // and P(n) is less than P(n + 1)
  !i-- ?                // and we have reached the correct index:
    n                   //   return n
  :                     // else:
    f(i, n)             //   go on with the next value

1

Japt , 29 27 26 byte

Non del tutto soddisfatto, ma almeno è meglio del mio primo tentativo che è stato di oltre 40 byte!

Emette il Nnumero th nella sequenza, 1 indicizzato.

È=Jõ_+X k â ÊÃé)e>Xo)«´U}a

Provalo


Spiegazione

Input implicito di numero intero U.

È                       }a

Restituisce il primo numero intero Xche restituisce true quando viene passato attraverso la seguente funzione.

=Jõ             )

Assegna l'array [-1,0,1]a X.

 _+X      Ã

Passa ogni elemento di quell'array attraverso una funzione che in primo luogo aggiunge il valore corrente di X.

k â Ê

Ottieni la lunghezza ( Ê) dei âfattori primi unici ( ) ( k) del risultato.

é

Ruota l'array risultante di uno a destra.

e>Xo)

Pop ( o) l'ultimo elemento da Xe verificare se tutti gli elementi rimanenti sono maggiori di esso.

«´U

In tal caso, decrementa Ue controlla se è uguale a 0.


1

Python 3 , 97 byte

n,g=9,lambda m,k=2,p=1:m//k and(m%k<p%k)+g(m,k+1,p*k*k)
while 1:n+=1;g(n-1)>g(n)<g(n+1)!=print(n)

In teoria, questo stampa la sequenza indefinitamente. In pratica, galla fine supera il limite di ricorsione.

Provalo online!



0

Pulito , 130 123 117 byte

import StdEnv
?n=[1\\q<-[p\\p<-[2..n]|and[gcd p i<2\\i<-[2..p-1]]]|n rem q<1]
f=[n\\n<-[3..]| ?n<min(?(n-1))(?(n+1))]

Equivale a un numero infinito di termini della sequenza. Dal momento che è tutto comprensibile, non può sfruttare molto bene la riduzione dei grafici e quindi è piuttosto lento, anche per un algoritmo così male.

Provalo online!


0

APL NARS, 124 byte, 62 caratteri

{(⍵>1E4)∨⍵≤0:¯1⋄x←9+⍳10×⍵⋄⍵↑(∊{v←⍴∘∪∘π¨⍵+2-⍳3⋄2=+/v>2⌷v}¨x)/x}

Dovrebbe restituire la risposta fino a 1E4, quindi restituire -1 errore; supponiamo che 9..10xargument abbia abbastanza numeri giusti; test:

  z←{(⍵>1E4)∨⍵≤0:¯1⋄x←9+⍳10×⍵⋄⍵↑(∊{v←⍴∘∪∘π¨⍵+2-⍳3⋄2=+/v>2⌷v}¨x)/x}  
  z 0
¯1
  z 1
11 
  z 20
11 13 19 23 25 27 29 37 41 43 47 49 53 59 61 64 67 71 73 79 

4
circa 150 byte?
Shaggy

@Shaggy sì, era un valore approssimativo; ma + - è giusto per il golf ...
RosLuP

Secondo il mio conteggio il punteggio qui è 147 byte, non 152 (il numero di caratteri è irrilevante). Ulteriori letture: codegolf.meta.stackexchange.com/q/9428/58974
Shaggy

@Shaggy il numero 152 sarebbe la dimensione in byte di un file che contiene solo quel codice (copia passato, salva quel codice in un documento di blocco note (Window) e osserva "proprietà" di quel file)
RosLuP

Non è così che contiamo i byte qui.
Shaggy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.