Số nguyên tố trong các cơ sở khác nhau


17

Thử thách:

Bạn được cấp một số cơ sở 10. Đối với mỗi cơ sở từ 10 đếm ngược đến cơ sở 2:

  1. Lấy số đầu vào ban đầu làm chuỗi 10 cơ sở và xóa bất kỳ chữ số nào của số không hợp lệ cho cơ sở.
  2. Giải thích chuỗi số kết quả trong cơ sở đó. Nếu điều này cho 1 hoặc 0, chấm dứt toàn bộ quá trình.
  3. Đầu ra hoặc in hệ số nguyên tố lớn nhất của nó, dưới dạng số thập phân.

Đầu ra có thể là một mảng của các yếu tố chính lớn nhất.

Các trường hợp mẫu:

Đầu vào:

987654321

Đầu ra:

379721
10593529
1091
179
1493
293
19
7

Luân phiên:

[379721,10593529,1091,179,1493,293,19,7]

Điều này in các yếu tố nguyên tố lớn nhất của 987654321, 87654321 9 = 42374116 10 , 7654321 8 = 2054353 10 , và cứ thế cho đến khi nó đạt 1 2 , khi nó dừng lại.


2
Tôi không rõ về quy trình. Tôi có thể có thể tìm ra nó từ ví dụ, nhưng bạn nên có hướng dẫn rõ ràng để điều này không cần thiết. Vì vậy, chúng tôi chuyển đổi sang một cơ sở thấp hơn, loại bỏ các chữ số không hợp lệ, sau đó in hệ số nguyên tố lớn nhất? Cơ sở nào để chúng tôi in yếu tố này trong? Sau đó chúng ta có làm quá trình tương tự với thừa số nguyên tố lớn nhất và cơ sở thấp hơn không? Hay chúng ta làm điều đó với số lượng chúng tôi bao gồm? Chúng ta bắt đầu với 10 hay 9?
xnor

Chào mừng đến với trang web!
DJMcMayhem

2
Tôi đã thử viết lại thử thách để làm cho nó rõ ràng hơn. Tôi hy vọng đây là những gì bạn dự định. Nếu không, hãy thoải mái thay đổi nó.
xnor

4
Tôi tìm thấy bước nhân tố lớn nhất thay vì xử lý hoạt động chính là chuyển đổi cơ sở. Nhiều ngôn ngữ chỉ cần thực hiện trực tiếp với tích hợp thừa số nguyên tố và phần còn lại về cơ bản phải thực hiện một thách thức riêng thứ hai. Chuyển đổi cơ sở cũng được xây dựng trong hoặc bán thân. Khi các hoạt động được xây dựng dưới dạng tích hợp, bạn hy vọng chúng sẽ là nền tảng tốt cho các sân gôn, và thực sự là nhân tố hóa và chuyển đổi cơ sở. Tuy nhiên, tốt cho một thử thách đầu tiên, nhưng những điều cần lưu ý cho lần tiếp theo.
xnor

3
Bất kỳ cơ hội này được lấy cảm hứng từ Google Code Jam?
Mego

Câu trả lời:


6

Bình thường, 25 byte

sfTm>1PiFdC,.u-N`tYKrT1zK
                       z   get input as a string
            .u      rT1    cumulative reduce over [10,9,...,2]
              -N`tY        remove one minus the number (10,9,...) from the input
          C,       K    K  pair each step along the chain with corresponding base
   m                       map over [["987654321", 10],...]:
       iFd                   apply the base-conversion (splat over i)
      P                      prime factorization, smallest to largest
    >1                       take [the last element], or [] if empty (1 or 0)
 fT                        remove the []s from 0s or 1s
s                          join the one-element arrays together

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



4

MATL , 17 15 byte

9:PQ"G@ZAYfXzX>

Điều này lấy số là một chuỗi có dấu ngoặc kép, được cho phép theo mặc định.

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

Giải trình

9:PQ     % Push array [10, 9, ..., 2]
"        % For each number in that array. These are the bases to be considered
  G      %   Push input. Forces for input to be taken implicitly first time
  @      %   Push current base
  ZA     %   Convert from that base to base 10, discarding non-valid digits
  Yf     %   Prime factors. Gives empty for input 1, and 0 for input 0
  Xz     %   Non-zero values. Gives empty if previous result was 0, or else
         %   leaves it as it was
  X>     %   Maximum of array. For empty input gives empty
         % Implicitly end for each
         % Implicitly display. Empty arrays are not displayed

Cái này xuất ra 0 ở cuối cho các đầu vào không kết thúc bằng 1.
poi830

Đối với các đầu vào '98765432' và '98765' (ví dụ ngẫu nhiên), nó xuất ra các số chính xác sau đó 0 trước khi kết thúc.
poi830

1
@ poi830 Đã giải quyết ngay
Luis Mendo

1

Julia, 101 byte

f(s,x=[],b=10)=(t=filter(c->c<=47+b,s))>"1"&&b>1?f(s,[x;maximum(keys(factor(parse(Int,t,b))))],b-1):x

Đây là một hàm đệ quy chấp nhận đầu vào dưới dạng một chuỗi và trả về một mảng.

Ung dung:

function f(s, x=[], b=10)
    # Filter the string down to only the digits valid for base b
    t = filter(c -> c <= 47 + b, s)

    # If the filtered string isn't "1" or "0" and b is a valid base
    if t > "1" && b > 1
        # Call the function again, appending the maximum prime factor
        # of t in base b to the argument x and decrementing the base
        f(s, [x; maximum(keys(factor(parse(Int, t, b))))], b-1)
    else
        # Otherwise return the array
        x
    end
end

1

Toán học, 83 byte

FactorInteger[Select[IntegerDigits@#,#<a&]~FromDigits~a][[-1,1]]~Table~{a,10,2,-1}&

Hàm ẩn danh, trả về một danh sách. Không phức tạp, phải trung thực.


0

Ruby, 120 byte

Hàm đệ quy, lấy đầu vào là một chuỗi.

f=->n,b=2{require'prime';i=n.tr([*b.to_s..?9].join,"").to_i(b)
b>10?[]:f[n,b+1]+[*i>1?Prime.prime_division(i).max[0]:p]}

1
Bạn có thể lưu một số byte bằng cách sử dụng -rprimecờ dòng lệnh thay vì require.
Doorknob

-rprimekhông hoạt động với tôi vì một số lý do ...
Ink Ink

0

Pyke, 19 byte, không biên dịch

(thêm splat_node functon)
DTAbPe
;1TtD=T`"":r

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

Đưa đầu vào trong dấu ngoặc kép, thoát với một lỗi.

Giải thích (dòng mới được thay thế bằng \ n):

D                    - Duplicate the first item on the stack (And get it from input first time)
 TAb                 - Convert input to base (whatever's in T, 10 default)
    Pe               - get the highest prime factor of the number
      \n;1           - print it out and get rid of it
          TtD=T      - T -= 1
               `"":  - input = input.replace(str(t), "")
                   r - GOTO start
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.