Giới thiệu / Bối cảnh
Trong một cuộc thảo luận gần đây trong cuộc trò chuyện về tiền điện tử, tôi đã được thử thách thảo luận / trợ giúp với bài kiểm tra tính nguyên thủy của Fermat và các số của Carmichael. Bài kiểm tra này dựa trên tiền đề a^(p-1) mod p==1
sẽ luôn giữ các số nguyên tố p
, nhưng không phải lúc nào cũng cho các vật liệu tổng hợp. Bây giờ, một số carmichael về cơ bản là kẻ thù tồi tệ nhất trong bài kiểm tra của Fermat: Một số mà bạn phải chọn a
để không phải là đồng tướng p
để có được a^(p-1) mod p!=1
. Bây giờ nếu a
không phải là đồng nguyên tố, về cơ bản bạn đã tìm thấy một yếu tố không tầm thường củap
và như chúng ta đều biết bao thanh toán có thể khá khó khăn. Đặc biệt là nếu tất cả các yếu tố là đủ lớn. Bây giờ bạn có thể nhận ra lý do tại sao thử nghiệm Fermat không được sử dụng trong thực tế thường xuyên (cũng có thuật toán tốt hơn), bởi vì có những con số mà bạn với tư cách là một người bảo vệ (về mặt bảo mật) sẽ phải thực hiện một số lượng công việc tương tự như một kẻ tấn công (cụ thể là yếu tố số lượng).
Vì vậy, bây giờ chúng tôi biết tại sao những con số này có phần hấp dẫn, chúng tôi sẽ tạo ra chúng theo cách ngắn nhất có thể, vì vậy chúng tôi chỉ có thể ghi nhớ mã tạo nếu chúng tôi cần!
Số Carmichael còn được gọi là A002997 trên OEIS .
Đã có một thách thức liên quan , nhưng các mục từ đó không cạnh tranh ở đây vì chúng được tối ưu hóa cho tốc độ trái ngược với kích thước. Lập luận tương tự cho hướng ngược lại, các mục ở đây có khả năng tạo ra sự đánh đổi so với tốc độ có lợi cho kích thước.
Sự chỉ rõ
Đầu vào
Đây là một thách thức trình tự tiêu chuẩn , vì vậy bạn lấy số nguyên dương hoặc không âm n
làm đầu vào. n
có thể là 0- hoặc 1 - được lập chỉ mục nếu bạn muốn (vui lòng cho biết).
Đầu ra
Đầu ra của bạn sẽ là n
số carmichael thứ hoặc số n
carmichael đầu tiên , nếu bạn muốn (vui lòng cho biết).
Sự chỉ rõ
Một số nguyên x
là một số Carmichael khi và chỉ khi x
là tổng hợp và cho tất cả các số nguyên y
với gcd(x,y)=1
, nó giữ số đó y^(x-1) mod x==1
.
Ai thắng?
Đây là mã golf , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!
Áp dụng quy tắc IO và kẽ hở tiêu chuẩn.
Các trường hợp thử nghiệm
Một số số carmichael đầu tiên là:
561,1105,1729,2465,2821,6601,8911,10585,15841,
29341,41041,46657,52633,62745,63973,75361,101101,
115921,126217,162401,172081,188461,252601,278545,
294409,314821,334153,340561,399001,410041,449065,
488881,512461