Oldukça Pürüzsüz Hareketler


18

Aritmetikte, n'nin belirli bir asal sayı olduğu n-düzgün sayı , matematiksel olarak n'den büyük hiçbir asal çarpanı olmayan pozitif bir tamsayı olarak tanımlanır. Örneğin, 42, 7-pürüzsüzdür, çünkü tüm asal faktörleri 7'den küçük veya ona eşittir, ancak 44, 7-pürüzsüz değildir, çünkü asal bir faktör olarak 11'e sahiptir.

Oldukça pürüzsüz bir sayıyı , kendi kare kökünden daha büyük asal faktörleri olmayan bir sayı olarak tanımlayın . Böylece, oldukça pürüzsüz sayıların listesi aşağıdaki gibi formüle edilebilir:

  • (DÜZENLENDİ!) 1, herhangi bir asal faktörün eksik olmaması nedeniyle oldukça pürüzsüz bir sayıdır. (Bu sorunun orijinal sürümünde, 1'in yanlışlıkla listeden çıkarıldığını unutmayın; bu nedenle, çıktılarınızdan hariç tutarsanız yanlış işaretlenmezsiniz.)
  • 4 (= 2 2 ) ve 8 arasında oldukça pürüzsüz sayılar 2 pürüzsüzdür, yani tek asal faktörleri olarak 2'ye sahiptirler.
  • 9 (= 3 2 ) ve 24 arasında oldukça pürüzsüz sayılar 3 pürüzsüzdür ve asal çarpanlarına ayırmada 2s ve 3s olabilir.
  • 25 (= 5 2 ) ve 48 arasında oldukça pürüzsüz sayılar 5-pürüzsüzdür ve asal çarpanlarına ayırmada 2s, 3s ve 5s olabilir.
  • Ve böylece, bir sonraki asal sayının karesine her ulaşıldığında kriterleri yükseltmek.

Oldukça pürüzsüz sayıların listesi sabittir ve şu şekilde başlar: 1, 4, 8, 9, 12, 16, 18, 24, 25, ...

Zorluk, 10.000'e kadar (= 100 2 ) dahil olmak üzere tüm oldukça düzgün sayıları çıkaran kod yazmaktır . Listedeki her sayı ile bir sonraki numara arasında en az bir ayırıcı (ne tür - boşluk, virgül, yeni satır, herhangi bir şey) olması gerekir, ancak hangi karakterin kullanıldığı tamamen önemsizdir.

Her zamanki gibi, en düşük bayt sayısı kazanır - açıkçası, listenin çıktısını almak sizin için çok yararlı olmayacaktır. İyi şanslar!


9
1 neden pürüzsüz değil?
Dennis

Listeyi ters sırayla çıkarabilir miyiz?
Leaky Nun

5
OEIS A048098 (ekstra dahil 1)
Leaky Nun

1
@Mego "4'ten küçük pürüzsüz sayılar yok." oldukça açıktır. Mutlaka açık değil, ama kesinlikle açık.
viraptor

1
@viraptor 1'in düzgün olmadığı ifade edilmediği için değil, tanımınız ve hariç tutma ifadeniz birbiriyle çeliştiği için açık değil.
Leaky Nun

Yanıtlar:


1

Aslında 11 bayt

4╤R`;yM²≤`░

Çevrimiçi deneyin!

1 içermez.

Açıklama:

4╤R`;yM²≤`░
4╤R          range(10**4)
   `;yM²≤`░  filter: take values where
    ;yM²       the square of the largest prime factor
        ≤      is less than or equal to the value

7

Jöle , 12 bayt

Æf>½S
³²ḊÇÐḟ

Çevrimiçi deneyin!

Nasıl çalışır

³²ḊÇÐḟ  Main link. No arguments.

³       Yield 100.
 ²      Square it to yield 10,000.
  Ḋ     Dequeue; yield [2, ..., 10,000].
   ÇÐḟ  Filter-false; keep elements for which the helper link returns 0.

Æf>½S   Helper link. Argument: n

Æf      Compute the prime factorization of n.
  >½    Compare the prime factors with the square root of n.
    S   Sum; add the resulting Booleans.

7

Brachylog , 21 19 bayt

1 baytlık ilham için Fatalize'a 1 bayt teşekkürler.

100^:4reP$ph^<=P@w\

Çevrimiçi deneyin!

Burada yaklaşık 6 saniye sürüyor.

100^:4reP$ph^<=P@w\
100                      100
   ^                     squared
    :4                   [10000,4]
      r                  [4,10000]
       eP                P is an integer in that interval (choice point),
        P$ph^<=P         P, prime factorized (from biggest to smallest),
                         take the first element, squared, is less than
                         or equal to P
               P@w       Write P with a newline,
                  \      Backtrack to the last choice point and make
                         a different choice until there is no more
                         choice and the program halts.

Önceki 21 baytlık çözüm

100^:4reP'($pe^>P)@w\

Çevrimiçi deneyin!

Burada yaklaşık 6 saniye sürüyor.

100^:4reP'($pe^>P)@w\
100                      100
   ^                     squared
    :4                   [10000,4]
      r                  [4,10000]
       eP                P is an integer in that interval (choice point),
        P'(      )       The following about P cannot be proved:
           $pe               one of its prime factor
              ^              squared
               >P            is greater than P
                  @w     Write P with a newline,
                    \    Backtrack to the last choice point and make
                         a different choice until there is no more
                         choice and the program halts.

100^:4reP$pot^<=P@w\bir bayt daha kısa, daha az zarif olsa da.
16:10

@Fatalize Teşekkürler, başka bir bayt golf
Leaky Nun

4

Haskell, 53 bayt

r=[1..10^4]
[n|n<-r,product[x|x<-r,x*x<=n]^n`mod`n<1]

Bu artık golf vaktim yok, ama eğer ben test etmek için bir yöntem göstermek istiyorum npürüzsüz güzel: numaralar dan Multiply 1için sqrt(n), (yani hesaplama bir faktöryel) yüksek güce ürünü yükseltmek ve sonucu olmadığını kontrol , katlarıdır n.

Çıktı almama r=[2..10^4]durumunda olarak değiştirin 1.


Herhangi bir golfçü değil, ama küp yeterli olduğundan eminim ( 8gerektirir).
Neil

2

Pyth , 16 15 bayt

Jakube sayesinde 1 bayt.

tf!f>*YYTPTS^T4

Çevrimiçi deneyin!

tf!f>*YYTPTS^T4
             T   10
            ^T4  10000
           S^T4  [1,2,3,...,10000]
 f               filter for elements as T for
                 which the following is truthy: 
         PT          prime factorization of T
   f                 filter for factor as Y:
     *YY                 Y*Y
    >   T                greater than T ?
  !                  logical negation
t                remove the first one (1)

Elbette Pyth'in kare işlevi var mı? Yani *dd bu fonksiyonla yer değiştirebilir misiniz ?
Conor O'Brien

@ ConorO'Brien Hayır, Pyth'in kare işlevi yok.
Leaky Nun

bir nevi gözetim gibi görünüyor
Conor O'Brien

2

05AB1E, 16 14 13 bayt

4°L¦vyf¤yt›_—

açıklama

4°L¦v             # for each y in range 2..10000
      yf¤         # largest prime factor of y
         yt       # square root of y
           ›_     # less than or equal
             —    # if true then print y with newline

Çevrimiçi deneyin


10000 adedi kısadır.
Adnan

@Adnan Teşekkürler! Bunu unuttum.
Emigna

2

Matlab, 58 57 56 52 48 bayt

for k=1:1e4
if factor(k).^2<=k
disp‌​(k)
end
end

Her sayı için, karenin tüm faktörlerinin sayının kendisinden daha büyük olup olmadığını kontrol eder. Evet ise, bu numarayı görüntüler.

@Luis Mendo'ya bu yaklaşımı golf oynadığı için teşekkürler


Başka bir yaklaşım (50 bayt):

n=1:10^4;for k=n
z(k)=max(factor(k))^2>k;end
n(~z)

Her sayı için, kare biçimindeki maksimum asal çarpan sayısının kendisinden küçük olup olmadığını hesaplar. Sonra indeksleme için kullanır.


1
Önceki yaklaşımınız daha kısa yapılabilir:for k=4:1e4,if factor(k).^2<=k,disp(k);end;end
Luis Mendo

1

SQF , 252 227 220

Standart kod biçimi:

#define Q(A,B) for #A from 2 to B do{
Q(i,10000)if([i]call{params["j"];u=sqrt j;a=true;Q(k,u)a=a and((j%k!=0)or(j/k<u)or!([j/k]call{params["x"];q=true;Q(z,sqrt x)q=q and(x%z!=0)};q}))};a})then{systemChat format["%1",i]}}

Ön işlemciyi derleme zincirine dahil edin, örneğin:

  • execVM "FILENAME.sqf"
  • call compile preprocessFile "FILENAME.sqf"

Bu, SQF'nin stdout'a en yakın şey olan Sistem Sohbeti günlüğüne yazıyor


1

C, 113 bayt

#include<stdio.h>
main(a){for(;++a<10001;){int n=2,c=a;for(;n*n<=a;n++)while(c%n<1)c/=n;if(c<2)printf("%d ",a);}}

Boşver!


1

Pyke, 13 12 11 bayt

T4^S#DP#X<!

Burada deneyin!

(Bağlantı 10 ^ 3'e kadar çıkar, çünkü 10 ^ 4 kez aşılır)

T4^S        -  one_range(10^4)
    #DP#X<! - filter_true(V, ^): (as i)
      P     -   factors(i)
       #X<! -  filter_true(V, ^):
        X   -   ^ ** 2
         <! -    not (i < ^)



0

R, 97 bayt

b=F;for(j in 1:1e4){for(i in which(!j%%1:j)[-1])if(which(!i%%1:i)[2]==i)b=i<=j^0.5;if(b)print(j)}

ungolfed

b <- F                               #Initializes
for (j in 1:1e4){                    #Loop across integers 1..10^4
    a <- which(!j%%1:j)[-1]          #Finds all factors
    for (i in a)                     #Loop across factors
         b <- which(!i%%1:i)[2]==i   #Tests primeness
         if(b) c <- i<=j^0.5         #If prime, tests smoothness
    if(c) print(j)                   #If biggest prime factor gives smooth
}                                    #result, Prints the number.

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.