sử dụng DeleteCases với CoprimeQ
đầu tiên hãy để tôi chỉ ra những gì tôi đã làm việc chính xác
f = Permutations[Range[5], {3}]
Riffle[f, Apply[CoprimeQ, f, {1}]]
bây giờ tôi muốn tự động xóa danh sách {a, b, c} trả về false từ thử nghiệm này. Tôi có thể làm điều đó với Do [] nhưng tôi muốn học lập trình hàm đúng cách bằng cách sử dụng các hàm có sẵn và hàm thuần túy trên một dòng mã.
Tôi đã dành rất nhiều thời gian để thử làm theo ví dụ này cho DeleteCases [] ở đây nhưng có vẻ như nó yêu cầu xây dựng một chức năng tùy chỉnh. nó cũng không hoàn toàn tương quan với ví dụ của tôi vì trong hướng dẫn đó họ đang so sánh hai danh sách. Tôi đã cố gắng hiểu nó nhưng nó đã qua đầu tôi.
đây không phải là ví dụ # 1 hoạt động
f = Permutations[Range[5], {3}]
DeleteCases[f, CoprimeQ]
đây không phải là ví dụ # 2 hoạt động
f = Permutations[Range[5], {3}]
DeleteCases[f, (CoprimeQ[_x] == False) -> x]
Ngoài ra, tôi không thích sử dụng tốc ký @@ @ / @@@. bạn có thể thấy tôi sử dụng biểu mẫu đầy đủ của Đơn đăng ký [] thích hợp hơn cho tôi trong khi tôi vẫn đang học. Tôi có thể chuyển đổi giữa chúng nếu tôi cần để đăng những gì bạn có.
Trả lời
DeleteCases[{x__ /; Not@CoprimeQ[x]}]@f
DeleteCases[Except[_List?(Apply[CoprimeQ])]]@f
cả hai đều cho
{{1, 2, 3}, {1, 2, 5}, {1, 3, 2}, {1, 3, 4}, {1, 3, 5}, {1, 4, 3}, {1, 4, 5}, {1, 5, 2}, {1, 5, 3}, {1, 5, 4}, {2, 1, 3}, {2, 1, 5}, {2, 3, 1}, {2, 3, 5}, {2, 5, 1}, {2, 5, 3}, {3, 1, 2}, {3, 1, 4}, {3, 1, 5}, {3, 2, 1}, {3, 2, 5}, {3, 4, 1}, {3, 4, 5}, {3, 5, 1}, {3, 5, 2}, {3, 5, 4}, {4, 1, 3}, {4, 1, 5}, {4, 3, 1}, {4, 3, 5}, {4, 5, 1}, {4, 5, 3}, {5, 1, 2}, {5, 1, 3}, {5, 1, 4}, {5, 2, 1}, {5, 2, 3}, {5, 3, 1}, {5, 3, 2}, {5, 3, 4}, {5, 4, 1}, {5, 4, 3}}
Bạn cũng sử dụng
Cases[{x__ /; CoprimeQ[x]}]@f
Cases[_List?(Apply[CoprimeQ])]@f
Select[Apply[CoprimeQ]]@f
Pick[f, Apply[CoprimeQ, f, 2]]
sau khi đọc và kiểm tra các ví dụ tuyệt vời do kglr cung cấp, tôi đã tìm thấy giải pháp dựa trên câu trả lời này phù hợp hơn với lựa chọn kiểu cú pháp ưa thích của tôi.
Select[Subsets[Range[5], {3}], Apply[CoprimeQ]]
Tôi đã phạm nhiều sai lầm. Tôi đang sử dụng Hoán vị thay vì Tập hợp con. rất khó để tìm tài liệu về @ nhưng tôi đã tìm thấy nó ở đây . không chính xác là tài liệu wolfram tốt nhất cho nhiều hơn một đối số nhưng nó đã giúp tôi hiểu sai về ví dụ được đăng ở đây. cái này được chuyển thể từ
f = Permutations[Range[5], {3}]
Select[Apply[CoprimeQ]]@f
nhận thấy tất cả các @ / @? __ /; đã biến mất sau khi tôi làm lại nó cho nhu cầu của mình.
sau khi tôi hợp nhất mọi thứ thành một dòng mã duy nhất bằng các hàm thuần túy, tôi đã có thể tạo Bảng. thí dụ:
Table[
Length[Select[Subsets[Range[x], {3}], Apply[CoprimeQ]]], {x, 3, 100}
]
cái nào cho
{1, 2, 7, 8, 19, 25, 37, 42, 73, 79, 124, 138, 159, 183, 262, 277,
378, 405, 454, 491, 640, 668, 794, 850, 959 , 1016, 1257, 1285, 1562,
1668, 1805, 1905, 2088, 2150, 2545, 2673, 2866, 2968, 3457, 3522,
4063, 4228, 4431, 4620, 5269, 5385, 5936, 6106, 6453, 6684 , 7513,
7660, 8166, 8400, 8834, 9141, 10168, 10287, 11388, 11752, 12202,
12614, 13341, 13521, 14848, 15263, 15921, 16164, 17657, 17918, 19505,
20031, 20603, 21125, 22248 , 22509, 24364, 24799, 25796, 26434, 28493,
28761, 30057, 30766, 31830, 32476, 34843, 35115, 36728,
37513, 38734, 39577, 41208, 41665, 44470, 45192, 46424, 47086}
Sau đó tôi tìm thấy một kết quả phù hợp trong OEIS . với mã ví dụ
a[n_] := Select[Subsets[Range[n], {3}], And @@ (GCD @@ # == 1 & /@ Subsets[#, {2}]) &] // Length;
a /@ Range[49]
bạn có thể quyết định ai có mã sạch nhất trong số tất cả các ví dụ. rất cảm ơn kglr đã giúp tôi vượt qua khi tôi gặp khó khăn.