GolfScript, 59 ký tự
~:N..*.,2>{:P{(.P\%}do(!},{{N-.*}$0=}:C~[1.{.@+.N<}do]C+++4/
Kịch bản này không đáp ứng một số yêu cầu:
- Nó chỉ hoạt động chính xác cho đầu vào
n >= 2
, nếu không nó bị hỏng.
- Đầu ra được cắt ngắn thành một số nguyên.
- Hiệu suất khủng khiếp cho bất kỳ lớn vừa phải
n
Một hướng dẫn ngắn gọn về mã:
~:N..*
Đầu vào được lưu trữ trong N, và chúng tôi đẩy cả hai n
và hình vuông n*n
ngay lập tức.
.,2>
Chúng tôi sẽ tạo một danh sách các số nguyên tố bằng cách lọc mảng [2..n*n]
. Chúng tôi sử dụng phép tính trước đây của chúng tôi n*n
là giới hạn trên (rất xấu!) Để tìm một số nguyên tố lớn hơn n.
{:P{(.P\%}do(!},
Mảng trước của chúng tôi được lọc bởi bộ phận thử nghiệm. Mỗi số nguyên P được kiểm tra đối với mọi số nguyên [P-1..1].
{{N-.*}$0=}:C~
Sắp xếp mảng trước dựa trên khoảng cách đến n
và lấy phần tử đầu tiên. Bây giờ chúng ta có số nguyên tố gần nhất.
[1.{.@+.N<}do]C
Chúng tôi tạo ra Fibonnacis cho đến khi chúng tôi nhận được một lớn hơn n
. May mắn thay, thuật toán này tự nhiên theo dõi các Fibonnaci trước đó, vì vậy chúng tôi ném cả hai vào một mảng và sử dụng sắp xếp khoảng cách trước đó của chúng tôi. Bây giờ chúng ta có Fibonnaci gần nhất.
+++4/
Trung bình cộng. Lưu ý rằng GolfScript không có hỗ trợ cho số float, vì vậy kết quả bị cắt ngắn.
GolfScript, 81 ký tự
Đây là một biến thể đáp ứng tất cả các yêu cầu.
~:N..*2N*,3,|2,^{:P{(.P\%}do(!},{{N-.*}$0=}:C~[0.1{.@+.N<}do]C+++100:E*4/.E/'.'@E%
Để đảm bảo hành vi đúng n<2
, tôi tránh 2<
(gặp sự cố khi mảng nhỏ), và thay vào đó sử dụng 3,|2,^
. Điều này đảm bảo mảng ứng cử viên chính chỉ là [2]
khi n < 2
. Tôi đã thay đổi giới hạn trên cho số nguyên tố tiếp theo từ n*n
thành 2*n
( định đề của Bertrand ). Ngoài ra, 0 được coi là một số Fibonnaci. Kết quả được tính toán trong điểm toán cố định ở cuối. Thật thú vị, có vẻ như kết quả luôn ở vị trí thứ tư (0, 0,25, 0,55, 0,75), vì vậy tôi hy vọng 2 vị trí thập phân của độ chính xác là đủ.
Lần đầu tiên tôi sử dụng GolfScript, tôi chắc chắn có chỗ để cải thiện!