Đôi khi, khi viết chương trình, bạn cần sử dụng số nguyên tố vì lý do này hay lý do khác (ví dụ như mật mã). Tôi cho rằng đôi khi, bạn cũng cần sử dụng một số tổng hợp. Đôi khi, ít nhất là ở đây trên PPCG, chương trình của bạn phải có khả năng xử lý các thay đổi tùy ý. Và trong hoàn cảnh thuận tiện đặt ra một câu hỏi PPCG thú vị, có lẽ ngay cả những con số bạn đang sử dụng cũng phải chống lại tham nhũng.
Định nghĩa
Một số tổng hợp là một số nguyên ≥ 4 mà không phải là số nguyên tố, tức là nó là sản phẩm của hai số nguyên nhỏ hơn lớn hơn 1. Một số hợp bitflip chống được định nghĩa như sau: đó là một số nguyên dương composit mà, nếu bạn viết nó trong hệ nhị phân với số bit tối thiểu có thể, bạn có thể thay đổi bất kỳ một hoặc hai bit nào từ số đó và số vẫn là tổng hợp.
Thí dụ
Ví dụ, hãy xem xét số 84. Trong nhị phân, đó là 1010100
. Dưới đây là tất cả các số khác nhau không quá 2 bit từ đó:
0000100 4 2 × 2 0010000 16 4 × 4 0010100 20 4 × 5 0010101 21 3 × 7 0010110 22 2 × 11 0011100 28 4 × 7 0110100 52 4 × 13 1000000 64 8 × 8 1000100 68 4 × 17 1000101 69 3 × 23 1000110 70 7 × 10 1001100 76 4 × 19 1010000 80 8 × 10 1010001 81 9 × 9 1010010 82 2 × 41 1010100 84 7 × 12 1010101 85 5 × 17 1010110 86 2 × 43 1010111 87 3 × 29 1011000 88 8 × 11 1011100 92 4 × 23 1011101 93 3 × 31 1011110 94 2 × 47 1100100 100 10 × 10 1110000 112 8 × 14 1110100 116 4 × 29 1110101 117 9 × 13 1110110 118 2 × 59 1111100 124 4 × 31
Cột đầu tiên là số ở dạng nhị phân; cột thứ hai là số thập phân. Như cột thứ ba chỉ ra, tất cả các số này là tổng hợp. Như vậy, 84 là một số tổng hợp kháng bitflip.
Nhiệm vụ
Bạn phải viết một trong ba chương trình hoặc chức năng sau đây, tùy theo ý nghĩa nhất đối với ngôn ngữ của bạn:
- Một chương trình hoặc hàm lấy số nguyên n không âm làm đầu vào và xuất ra các số tổng hợp kháng n bitflip đầu tiên .
- Một chương trình hoặc hàm lấy số nguyên n không âm làm đầu vào và xuất ra tất cả các số tổng hợp kháng bitflip nhỏ hơn n (hoặc nếu bạn thích, nhỏ hơn hoặc bằng n , tức là bạn có thể chọn n có được đưa vào đầu ra hay không nếu bitflip -tăng cường).
- Một chương trình hoặc hàm không có đầu vào và xuất ra tất cả các số tổng hợp kháng bitflip. (Điều này phải sử dụng cơ chế đầu ra có khả năng tạo đầu ra trong khi chương trình vẫn đang chạy, chẳng hạn như in ra thiết bị xuất chuẩn, danh sách lười biếng hoặc trình tạo; bạn không thể chỉ tính toàn bộ danh sách và sau đó in.)
Các trường hợp thử nghiệm
Dưới đây là một số số tổng hợp kháng bitflip đầu tiên:
84, 184, 246, 252, 324, 342, 424, 468, 588, 636, 664, 670, 712, 730, 934, 958
Làm rõ
- Đây chỉ là những con số bạn sản xuất phải có khả năng chống lại bitflips. Đây không phải là một nhiệm vụ về việc làm cho chương trình tìm thấy chúng kháng bitflips; sử dụng bất cứ số nào trong chính chương trình mà bạn thích.
- Các số bạn xuất ra không phải kháng bitflip trong "số 0 đứng đầu"; hãy tưởng tượng rằng các số đó sẽ được lưu trữ trong số bit tối thiểu có thể và chỉ những bit đó phải miễn nhiễm với việc lật. Tuy nhiên, 1 bit ban đầu trên các số bạn xuất ra phải miễn dịch với bitflips.
- Sử dụng bất kỳ thuật toán nào bạn thích mà tạo ra kết quả đúng; bạn không được đánh dấu về hiệu quả ở đây.
- Nếu bạn có thể chứng minh rằng có rất nhiều số tổng hợp kháng bitflip, thì a) các hạn chế về định dạng đầu ra được gỡ bỏ và b) mã hóa danh sách sẽ được cho phép (mặc dù có lẽ dài dòng hơn là chỉ tính toán). Quy tắc này chủ yếu chỉ để hoàn thiện; Tôi không mong đợi nó có liên quan.
Điều kiện chiến thắng
Đây là môn đánh gôn , vì vậy, như thường lệ, ngắn hơn là tốt hơn. Cũng như thường lệ, độ dài của chương trình sẽ được đo bằng byte.
n
nếun
có kháng bitflip không? (tức là làm cho nó "nhỏ hơn hoặc bằng n"?)