Lý lịch
Tiền tệ chính thức của quốc gia tưởng tượng Golfenistan là foo , và chỉ có ba loại tiền đang lưu hành: 3 foos, 7 foos và 8 foos. Người ta có thể thấy rằng không thể trả một số tiền nhất định, như 4 foos, bằng cách sử dụng những đồng tiền này. Tuy nhiên, tất cả số tiền đủ lớn có thể được hình thành. Công việc của bạn là tìm ra số tiền lớn nhất không thể hình thành với các đồng tiền (5 foos trong trường hợp này), được gọi là vấn đề tiền xu .
Đầu vào
Đầu vào của bạn là một danh sách các số nguyên dương, đại diện cho các giá trị của tiền xu đang lưu hành. Hai điều được đảm bảo về nó:L = [n1, n2, ..., nk]
- GCD của các yếu tố
L
là 1. L
không chứa số 1.
Nó có thể chưa được sắp xếp và / hoặc chứa các bản sao (nghĩ các đồng tiền phiên bản đặc biệt).
Đầu ra
Vì GCD L
là 1, mọi số nguyên đủ lớn m
có thể được biểu diễn dưới dạng kết hợp tuyến tính không âm của các phần tử của nó; nói cách khác, chúng ta có
m = a1*n1 + a2*n2 + ... + ak*nk
cho một số số nguyên . Đầu ra của bạn là số nguyên lớn nhất không thể được biểu thị dưới dạng này. Như một gợi ý, người ta biết rằng đầu ra luôn luôn nhỏ hơn , nếu và là các phần tử tối đa và tối thiểu của ( tham chiếu ).ai ≥ 0
(n1 - 1)*(nk - 1)
n1
nk
L
Quy tắc
Bạn có thể viết một chương trình đầy đủ hoặc một chức năng. Số byte thấp nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép. Nếu ngôn ngữ của bạn có hoạt động tích hợp sẵn cho việc này, bạn không thể sử dụng ngôn ngữ đó. Không có yêu cầu về thời gian hoặc hiệu quả bộ nhớ, ngoại trừ việc bạn sẽ có thể đánh giá các trường hợp kiểm tra trước khi đăng câu trả lời của bạn.
Sau khi tôi đăng thử thách này, người dùng @vihan đã chỉ ra rằng Stack Overflow có một bản sao chính xác . Dựa trên thảo luận Meta này , thử thách này sẽ không bị xóa dưới dạng trùng lặp; tuy nhiên, tôi yêu cầu tất cả các câu trả lời dựa trên các phiên bản SO nên trích dẫn bản gốc, được đưa ra trạng thái Community Wiki và bị xóa nếu tác giả ban đầu muốn đăng câu trả lời của họ ở đây.
Các trường hợp thử nghiệm
[3, 7, 8] -> 5
[25, 10, 16] -> 79
[11, 12, 13, 14, 13, 14] -> 43
[101, 10] -> 899
[101, 10, 899] -> 889
[101, 10, 11] -> 89
[30, 105, 70, 42] -> 383
[2, 51, 6] -> 49
(p - 1)(q - 1)
là giới hạn trên, trong đó p
và q
là phần tử nhỏ nhất và lớn nhất của tập hợp.
[2,3]
trong một khoảng thời gian hợp lý và không có gì khác. [2,5]
sẽ tạo ra khoảng một triệu danh sách Python trong bộ nhớ.
FrobeniusNumber
trong Mathicala.