Tính số, phiên bản chia


11

Lấy cảm hứng từ câu hỏi này trên Toán.

Hãy để cho nguyên tố của một số, n , được biểu diễn dưới dạng P (n) = 2 một x 3 b x 5 c x ... .
(Sử dụng x là biểu tượng nhân.)
Sau đó, số lượng các ước của n có thể được biểu diễn dưới dạng D (n) = (a + 1) x (b + 1) x (c + 1) ... .
Do đó, chúng ta có thể dễ dàng nói rằng số ước của 2nD (2n) = (a + 2) x (b + 1) x (c + 1) ... ,
số ước của 3nD (3n ) = (a + 1) x (b + 2) x (c + 1) ... ,
v.v.

Thử thách:

Viết chương trình hoặc hàm sử dụng các thuộc tính này để tính n , với các đầu vào ước số nhất định.

Đầu vào:

Một tập hợp các số nguyên, hãy gọi chúng là w, x, y, z , với tất cả các định nghĩa sau:

  • tất cả các đầu vào lớn hơn 1 - w, x, y, z > 1
  • xz là khác biệt -x<>z
  • xz là số nguyên tố - P(x)=x, D(x)=2P(z)=z,D(z)=2
  • w là số ước của xn -D(xn)=w
  • y là số ước của zn -D(zn)=y

Đối với vấn đề được đưa ra trong câu hỏi được liên kết, một ví dụ đầu vào có thể là (28, 2, 30, 3). Điều này dịch sang D(2n)=28D(3n)=30, với n=864.

Đầu ra:

Một số nguyên duy nhất, n , thỏa mãn các định nghĩa và hạn chế đầu vào ở trên. Nếu nhiều số phù hợp với các định nghĩa, đầu ra nhỏ nhất. Nếu không có số nguyên như vậy là có thể, xuất ra một giá trị falsey .

Ví dụ:

(w, x, y, z) => output

(28, 2, 30, 3) => 864
(4, 2, 4, 5) => 3
(12, 5, 12, 23) => 12
(14, 3, 20, 7) => 0 (or some other falsey value)
(45, 13, 60, 11) => 1872
(45, 29, 60, 53) => 4176

Quy tắc:

  • Tiêu chuẩn quy tắc golf-golf và hạn chế kẽ hở áp dụng.
  • Quy tắc đầu vào / đầu ra tiêu chuẩn được áp dụng.
  • Số đầu vào có thể theo bất kỳ thứ tự nào - vui lòng ghi rõ trong câu trả lời của bạn mà bạn đang sử dụng.
  • Các số đầu vào có thể ở bất kỳ định dạng phù hợp nào: được phân tách bằng dấu cách, một mảng, hàm riêng biệt hoặc các đối số dòng lệnh, v.v. - sự lựa chọn của bạn.
  • Tương tự, nếu đầu ra cho STDOUT, khoảng trắng xung quanh, dòng mới, v.v ... đều là tùy chọn.
  • Phân tích cú pháp đầu vào và định dạng đầu ra không phải là các tính năng thú vị của thử thách này.
  • Vì lợi ích của độ phức tạp và số nguyên tràn, thử thách số n sẽ có những hạn chế như vậy 1 < n < 100000- nghĩa là, bạn không cần phải lo lắng về các câu trả lời có thể nằm ngoài phạm vi này.

Liên quan


Vì vậy, nếu giải pháp nhỏ nhất lớn hơn 100.000, tôi có thể chọn trả về giải pháp hoặc bằng không?
Dennis

@Dennis Nếu nó làm cho mã của bạn ngắn hơn, chắc chắn. Hoặc là sẽ được chấp nhận.
admBorkBork

Câu trả lời:


3

Thạch , 17 16 byte

×€ȷ5R¤ÆDL€€Z=Ḅi3

Đây là một giải pháp vũ phu thử tất cả các giá trị có thể lên tới 100.000. Hãy thử trực tuyến!

Phiên bản không cạnh tranh

Phiên bản mới nhất của Jelly có sửa lỗi cho phép giảm mã trên xuống còn 15 byte .

ȷ5R×€³ÆDL€€=Ḅi3

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

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

×€ȷ5R¤ÆDL€€Z=Ḅi3  Main link. Left input: x,z. Right input: w,y

     ¤            Combine the two atoms to the left into a niladic chain.
  ȷ5              Yield 100,000 (1e5).
    R             Apply range. Yields [1, ..., 100,000].
x€                Multiply each r in the range by x and z.
                  This yields [[x, ..., 100,000x], [z, ..., 100,000z]].
      ÆD          Compute the divisors of each resulting integer.
        L€€       Apply length to each list of divisors.
                  This counts the divisors of each integer in the 2D array.
           Z      Zip; group the divisors of kx and kz in pairs.
            =     Compare each [divisors(kx), divisors(kz)] with [w, y].
                  This yields a pair of Booleans.
             Ḅ    Convert each Boolean pair from binary to integer.
              i3  Find the first index of 3. Yields 0 for not found.

Xin chúc mừng, bạn mặc định chiến thắng! : D
admBorkBork
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.