Di chuyển khá mượt


18

Trong số học, một số n-mịn , trong đó n là một số nguyên tố nhất định, được định nghĩa toán học là một số nguyên dương không có thừa số nguyên tố nào lớn hơn n. Ví dụ, 42 là 7 mịn vì tất cả các thừa số nguyên tố của nó nhỏ hơn hoặc bằng 7, nhưng 44 không phải là 7 trơn vì nó cũng có 11 là một thừa số nguyên tố.

Xác định một số khá trơn tru là một số không có thừa số nguyên tố nào lớn hơn căn bậc hai của chính nó. Do đó, danh sách các số khá trơn tru có thể được xây dựng như sau:

  • (EDITED!) 1 là một con số khá suôn sẻ, do hoàn toàn không có bất kỳ yếu tố chính nào. (Lưu ý rằng trong phiên bản gốc của câu hỏi này, 1 đã bị loại nhầm khỏi danh sách, vì vậy nếu bạn loại trừ nó khỏi kết quả đầu ra, bạn sẽ không bị đánh dấu sai.)
  • Trong khoảng từ 4 (= 2 2 ) đến 8, các số khá mượt là 2 mịn, nghĩa là chúng có 2 là thừa số nguyên tố duy nhất.
  • Trong khoảng từ 9 (= 3 2 ) đến 24, các số khá mượt là 3 số và có thể có 2 và 3 trong các thừa số nguyên tố của chúng.
  • Trong khoảng từ 25 (= 5 2 ) đến 48, các số khá mượt là 5 số và có thể có 2, 3 và 5 trong các thừa số nguyên tố của chúng.
  • Và như vậy, nâng cấp các tiêu chí mỗi khi đạt được bình phương của số nguyên tố tiếp theo.

Danh sách các số khá trơn tru được cố định và bắt đầu như sau: 1, 4, 8, 9, 12, 16, 18, 24, 25, ...

Thử thách của bạn là viết mã sẽ xuất ra tất cả các số khá mượt mà lên đến 10.000 (= 100 2 ). Phải có ít nhất một dấu phân cách (không quan trọng là loại nào - dấu cách, dấu phẩy, dòng mới, bất cứ thứ gì) giữa mỗi số trong danh sách và số tiếp theo, nhưng nó hoàn toàn không liên quan đến ký tự nào được sử dụng.

Như thường lệ, số byte thấp nhất sẽ thắng - rõ ràng, chỉ cần xuất ra danh sách sẽ không quá có lợi cho bạn ở đây. Chúc may mắn!


9
Tại sao 1 không đẹp?
Dennis

Chúng ta có thể xuất danh sách theo thứ tự ngược lại không?
Nữ tu bị rò rỉ

5
OEIS A048098 (bao gồm thêm 1)
Leaky Nun

1
@Mego "Không có số nào khá mịn dưới 4." là khá rõ ràng. Không nhất thiết phải rõ ràng, nhưng chắc chắn rõ ràng.
viraptor

1
@viraptor Nó được bình chọn là không rõ ràng không phải vì không nói rằng 1 không suôn sẻ, nhưng vì định nghĩa và tuyên bố loại trừ của bạn mâu thuẫn với nhau.
Leaky Nun

Câu trả lời:


1

Trên thực tế, 11 byte

4╤R`;yM²≤`░

Hãy thử trực tuyến!

Không bao gồm 1.

Giải trình:

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

Thạch , 12 byte

Æf>½S
³²ḊÇÐḟ

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

³²ḊÇÐḟ  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 byte

1 byte nhờ Fatalize, lấy cảm hứng từ 1 byte khác.

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

Hãy thử trực tuyến!

Mất khoảng 6 giây ở đây.

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.

Giải pháp 21 byte trước đó

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

Hãy thử trực tuyến!

Mất khoảng 6 giây ở đây.

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\ngắn hơn một byte, mặc dù kém thanh lịch.
Gây tử vong vào

@Firthize Cảm ơn, tôi đã đánh gôn một byte khác
Leaky Nun

4

Haskell, 53 byte

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

Tôi không có thời gian để chơi golf này ngay bây giờ, nhưng tôi muốn để minh họa một phương pháp để kiểm tra nếu nlà khá mịn: Multiply các số từ 1đến sqrt(n)(tức là tính toán một giai thừa), nâng cao sản phẩm cho một công suất cao, và kiểm tra nếu kết quả là bội số của n.

Thay đổi thành r=[2..10^4]nếu 1không nên là đầu ra.


Không phải là bất kỳ tay golf nào, nhưng tôi khá chắc chắn khối lập phương đủ ( 8yêu cầu nó).
Neil

2

Bình thường , 16 15 byte

1 byte nhờ Jakube.

tf!f>*YYTPTS^T4

Hãy thử trực tuyến!

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)

Chắc chắn Pyth có chức năng vuông? Vậy bạn có thể thay thế *dd bằng chức năng đó?
Conor O'Brien

@ ConorO'Brien Nope, Pyth không có chức năng hình vuông.
Leaky Nun

có vẻ như là một sự giám sát
Conor O'Brien

2

05AB1E, 16 14 13 byte

4°L¦vyf¤yt›_—

Giải trình

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

Dùng thử trực tuyến


là viết tắt của 10000.
Adnan

@Ad Nam Cảm ơn! Quên cái đó đi.
Emigna

2

Matlab, 58 57 56 52 48 byte

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

Đối với mỗi số, nó kiểm tra nếu tất cả các yếu tố bình phương không lớn hơn chính số đó. Nếu có, hiển thị số đó.

Cảm ơn @Luis Mendo vì đã chơi golf theo cách này


Một cách tiếp cận khác (50 byte):

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

Đối với mỗi số tính toán xem bình phương hệ số nguyên tố tối đa của nó có nhỏ hơn chính số đó hay không. Sau đó sử dụng nó để lập chỉ mục.


1
Cách tiếp cận trước đây của bạn có thể được thực hiện ngắn hơn:for k=4:1e4,if factor(k).^2<=k,disp(k);end;end
Luis Mendo

1

SQF , 252 227 220

Định dạng tập lệnh tiêu chuẩn:

#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]}}

Bao gồm bộ xử lý trước trong chuỗi biên dịch khi gọi, ví dụ:

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

Điều này ghi vào nhật ký trò chuyện hệ thống, đây là điều gần nhất mà SQF phải xuất ra



1

Pyke, 13 12 11 byte

T4^S#DP#X<!

Hãy thử nó ở đây!

(Liên kết chỉ tăng tối đa 10 ^ 3 vì hết 10 ^ 4 lần)

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 byte

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

vô dụng

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.

0

Bình thường, 12 byte

g#^ePT2tS^T4

Không bao gồm 1.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.