Faktör fakiri sayılar


20

Pozitif bir tamsayı , halefinden ve selefinden (kesinlikle) daha az asal faktörlere (çoklukları saymadan) sahipse, buna birN>2 faktöre fakir bir sayı diyelim .

Diğer bir deyişle, ve ω ( K ) < ω ( N + 1 ) , ω ( K ) benzersiz asal faktörlerinin sayısı , N .ω(N)<ω(N1)ω(N)<ω(N+1)ω(N)N

Görev

Aşağıdaki G / Ç formatları arasından seçim yapabilirsiniz:

  • Bir tamsayı al ve çıkış N inci faktörü-düşük sayısı. Bunu seçerseniz, N 0 veya 1 dizinli olabilir.NNthN
  • Pozitif bir tamsayı alın ve ilk N faktörü zayıf sayılarını çıkarın.NN
  • Diziyi süresiz olarak yazdırın.

Bu boşlukların varsayılan olarak yasak olduğunu göz önünde bulundurarak, herhangi bir programlama dilinde herhangi bir standart yöntemle girdi alabilir ve çıktı sağlayabilirsiniz . Bu kod golf, bu yüzden kurallara uyan en kısa teslim kazanır.

Ayrı test senaryoları içermeyeceğim , çünkü rekabet yöntemleri farklıdır, ancak bu dizinin OEIS A101934 olan ilk 100 terimine başvurabilirsiniz :

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

Örnek olarak, bu sırayla oluşur, çünkü ω ( 25 ) = 1 (5), ω ( 26 ) = 2 (2 ve 13) ve ω ( 24 ) = 2 (2 ve 3), yani ω ( 25 ) < ω ( 24 ) ve ω ( 25 ) < ω ( 26 ) .25ω(25)=1ω(26)=2ω(24)=2ω(25)<ω(24)ω(25)<ω(26)


n = Her değerden önce bir satır aralığı çıktısı verebilir miyim ?
Steadybox

@Steadybox Sketchy, ama izin vereceğim: - /
Bay Xcoder

Alternatif bir versiyon olarak ekledim.
Steadybox

Yanıtlar:


7

Brachylog , 21 bayt

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

Çevrimiçi deneyin!

Sonsuz yazdırır.

açıklama

⟨+₁≡-₁⟩                  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

Jöle , 13 12 bayt

Cr~ÆvÐṂN⁼Wø#

İlk n faktörü düşük olan sayıları yazdırır .

Çevrimiçi deneyin!

Nasıl çalışır

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 bayt

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

Çevrimiçi deneyin!


@FryAmTheEggman teşekkürler! Önerinizi kullanmasam bile, 4 baytlık tasarruf sağlayan başka bir yaklaşımdan ilham aldı: D
Rod

Güzel! İki çirkin
lambdadan

4

MATL , 26 24 22 bayt

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

Diziyi süresiz olarak yazdırır.

Çevrimiçi deneyin!

açıklama

`         % 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

Kabuk , 22 bayt

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

Diziyi süresiz olarak yazdırır, çevrimiçi deneyin veya ilk N'yi görüntüleyin !

Alternatif §oΛ>←t olarak yerine kullanılabilirΠtSM<← .

açıklama

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 bayt

.f!-.ml{Pb}tZh

Burada deneyin!

Başlangıçta Dopapp'ın cevabı hakkında bir öneriydi , ama bana ayrı olarak göndermemi söylediler .

Nasıl çalışır?

.f! -. ml {Pb} tZh | Tam program. STDIN'den girdi alır, ilk N'yi STDOUT'a verir.

.f | (var: Z) yüklemi karşılayan ilk N değerlerini çıktılar.
          } tZh | [Z - 1, Z, Z + 1] listesini oluşturur.
    .m | (var: b) İşlev değeri minimum olan öğeleri alır.
        Pb | Temel faktörler b.
      l {| Tekilleştir, uzunluk al.
               | Faktör fakiri bir sayı için bu, tek bir tona sarılmış olarak gelir.
   - | Z'yi buradan kaldırın.
  ! | Mantıksal olumsuzlama.

3

Haskell, 105 86 bayt

19 bayt tasarruf için @Wheat Wizard, @Bruce Forte ve @Laikoni'ye teşekkürler.

[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]]


kullanırken rem ==0ve /=0ile değiştirilirken edilebilir <1ve >0sırasıyla.
Buğday Büyücüsü

Yardımcı fonksiyonun iyi olması nedeniyle bir lettanımlamaya gerek yoktur d( golf kuralları kılavuzuna bakın ). Ayrıca sumatlanabilir, karşılaştırma listelerde aynı şekilde çalışır. 86 bayt: Çevrimiçi deneyin!
Laikoni

2

Oktav ,  87   83  79 bayt

Bir bayt tasarrufu için @Cows quack ve üç altı bayt tasarrufu için @Luis Mendo sayesinde !

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

Diziyi süresiz olarak yazdırır.

Çevrimiçi deneyin!

n =Her değerden önce önde gelen 73 bayt :

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

Çevrimiçi deneyin!


Ben işlevi düşünüyorum folabilir f=@(n)length(unique(factor(n)))bir eksik byte için.
Kritixi Lithos

2

05AB1E , 14 13 bayt

N'inci faktörün fakir sayısını verir (1 dizinli)

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

Çevrimiçi deneyin!

açıklama

µ                 # 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
Geçiş yapmak üzereydim µ, bu yüzden sanırım sadece alternatifimi göstereceğim - eğer yardımcı olursa N<N>Ÿ, ikame edebilirim 3LN+Í.
Bay Xcoder

@ Mr.Xcoder: Benzer ®XŸN+şekilde çalışıyor. Veya 0®X)N+bu durumda Àgerekli olmazdı. Ne yazık ki hepsi aynı bayt sayımı ile sonuçlanıyor.
Emigna

1

Pyth, 30 25 bayt

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

Bu benim ilk gerçek Pyth golf, bu yüzden herhangi bir yorum çok takdir edilmektedir.

Xcoder'a çok teşekkürler!

açıklama

#                         | 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 bayt: .f!-.ml{Pb}tZh(baskılar ilk n) ( .fbirinci alır N üzerinden bir koşulu yerine değerleri [1,2,3,...]ve bir değişken kullanan Z, }tZhtam sayı aralığını oluşturur [Z - 1 ... Z + 1], .mile (en az bir fonksiyon değerine sahip elemanların listesini geri b), l{Pbfarklı bölenler sayı alır, listeden -atar Z, !mantıksal olumsuzlama uygular)
Bay Xcoder

1
@ Mr.Xcoder, vay canına bunu yakın zamanda kazanacağımı sanmıyorum! Kendi cevabını hak ettiğini söylemez miydin?
Daniel

@Dopapp Tamam, ayrı olarak gönderdim . +1 Pyth Golf'e hoş geldiniz!
Bay Xcoder

Yaklaşımınızı kullanarak 25 bayt .
Bay Xcoder

Hayır! his +1, tis -1, while Katamadan atanan bir değişkendir =. Örneğin, K4atar Kiçin 4. Daha sonra kullanarak erişebilirsiniz K.
Bay Xcoder

1

JavaScript (ES6), 94 bayt

0 indeksli N'inci faktör-zayıf sayısını döndürür.

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)

Çevrimiçi deneyin!

Nasıl?

Önce belirli bir tam sayının benzersiz asal faktörlerinin sayısını döndüren P () işlevini tanımlarız .

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

Sarma kodu şimdi şöyle okunur:

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 bayt

Bu tamamen memnun değil ama en azından 40 byte üzerinde olan ilk denemem daha iyi!

Çıkışlar Nsırayla inci sayısı, 1-endekslendi.

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

Dene


açıklama

Örtük tamsayı girişi U.

È                       }a

XAşağıdaki işlevden geçirildiğinde true değerini döndüren ilk tamsayıyı döndürün .

=Jõ             )

Dizi atama [-1,0,1]için X.

 _+X      Ã

Bu dizinin her öğesini, önce geçerli değerini ekleyen bir işlevden geçirin X.

k â Ê

Sonucun Êunique ( â) asal çarpanlarının ( k) uzunluğunu ( ) elde edin .

é

Elde edilen diziyi bir sağa döndürün.

e>Xo)

Kaynağındaki oson öğeyi ( ) açın ve Xkalan tüm öğelerin bundan daha büyük olup olmadığını kontrol edin.

«´U

Öyleyse, azaltın Uve 0'a eşit olup olmadığını kontrol edin.


1

Python 3 , 97 bayt

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)

Teoride, bu diziyi süresiz olarak yazdırır. Uygulamada, gnihayetinde özyineleme sınırını aşıyor.

Çevrimiçi deneyin!



0

Temiz , 130 123 117 bayt

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))]

Dizinin sonsuz sayıda terimine eşittir. Her şey iç içe kavrayışlar olduğundan, grafik azaltımından çok iyi yararlanamaz ve bu nedenle böyle kötü bir algoritma için bile oldukça yavaştır.

Çevrimiçi deneyin!


0

APL NARS, 124 bayt, 62 karakter

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

Cevabı 1E4'e kadar döndürmeli, sonra -1 hatası döndürmelidir; 9..10xargument'in doğru sayılara sahip olduğunu varsayalım; Ölçek:

  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
yaklaşık 150 bayt?
Shaggy

@Shaggy evet yaklaşık bir değerdi; ama + - golfçüler için doğru ...
RosLuP

Sayımla, buradaki puan 152 bayt değil, 147 bayttır (karakter sayısı önemsizdir). İlave okumalar: codegolf.meta.stackexchange.com/q/9428/58974
Shaggy

@ 152 sayısı, yalnızca bu kodu içeren bir dosyanın bayt cinsinden boyutu olacaktır (geçmiş kopyala, bu kodu bir not defteri (Pencere) belgesine kaydedin ve bu dosyanın "özelliğini" gözlemleyin)
RosLuP

Burada bayt saymamız böyle değil.
Shaggy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.