commit 8b20a5dd214b7ae93a2b530757c399f9d8000c27 Author: sangge <2251250136@qq.com> Date: Wed Feb 4 11:15:03 2026 +0800 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..7cd9e73 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,742 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "cc" +version = "1.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2352e5597e9c544d5e6d9c95190d5d27738ade584fa8db0a16e130e5c2b5296e" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" + +[[package]] +name = "chrono" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-link", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "hamming" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65043da274378d68241eb9a8f8f8aa54e349136f7b8e12f63e3ef44043cc30e1" + +[[package]] +name = "iana-time-zone" +version = "0.1.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "libc" +version = "0.2.174" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "p1" +version = "0.1.0" + +[[package]] +name = "p10" +version = "0.1.0" +dependencies = [ + "primes", +] + +[[package]] +name = "p102" +version = "0.1.0" +dependencies = [ + "rayon", +] + +[[package]] +name = "p103" +version = "0.1.0" +dependencies = [ + "rayon", +] + +[[package]] +name = "p11" +version = "0.1.0" + +[[package]] +name = "p110" +version = "0.1.0" + +[[package]] +name = "p112" +version = "0.1.0" +dependencies = [ + "rayon", +] + +[[package]] +name = "p12" +version = "0.1.0" + +[[package]] +name = "p125" +version = "0.1.0" +dependencies = [ + "rayon", +] + +[[package]] +name = "p13" +version = "0.1.0" +dependencies = [ + "anyhow", + "num-bigint", +] + +[[package]] +name = "p14" +version = "0.1.0" + +[[package]] +name = "p15" +version = "0.1.0" + +[[package]] +name = "p16" +version = "0.1.0" +dependencies = [ + "num-bigint", +] + +[[package]] +name = "p167" +version = "0.1.0" + +[[package]] +name = "p17" +version = "0.1.0" + +[[package]] +name = "p18" +version = "0.1.0" + +[[package]] +name = "p19" +version = "0.1.0" +dependencies = [ + "chrono", +] + +[[package]] +name = "p2" +version = "0.1.0" + +[[package]] +name = "p20" +version = "0.1.0" +dependencies = [ + "num-bigint", +] + +[[package]] +name = "p21" +version = "0.1.0" + +[[package]] +name = "p22" +version = "0.1.0" + +[[package]] +name = "p23" +version = "0.1.0" +dependencies = [ + "rayon", +] + +[[package]] +name = "p24" +version = "0.1.0" +dependencies = [ + "itertools", +] + +[[package]] +name = "p25" +version = "0.1.0" +dependencies = [ + "num-bigint", +] + +[[package]] +name = "p26" +version = "0.1.0" + +[[package]] +name = "p27" +version = "0.1.0" +dependencies = [ + "primal", +] + +[[package]] +name = "p28" +version = "0.1.0" + +[[package]] +name = "p29" +version = "0.1.0" + +[[package]] +name = "p3" +version = "0.1.0" +dependencies = [ + "primal", +] + +[[package]] +name = "p30" +version = "0.1.0" + +[[package]] +name = "p31" +version = "0.1.0" + +[[package]] +name = "p32" +version = "0.1.0" + +[[package]] +name = "p33" +version = "0.1.0" + +[[package]] +name = "p34" +version = "0.1.0" +dependencies = [ + "rayon", +] + +[[package]] +name = "p35" +version = "0.1.0" +dependencies = [ + "primal", +] + +[[package]] +name = "p36" +version = "0.1.0" + +[[package]] +name = "p37" +version = "0.1.0" +dependencies = [ + "primal", +] + +[[package]] +name = "p38" +version = "0.1.0" + +[[package]] +name = "p39" +version = "0.1.0" + +[[package]] +name = "p4" +version = "0.1.0" + +[[package]] +name = "p40" +version = "0.1.0" + +[[package]] +name = "p41" +version = "0.1.0" +dependencies = [ + "itertools", + "primal", +] + +[[package]] +name = "p42" +version = "0.1.0" + +[[package]] +name = "p43" +version = "0.1.0" + +[[package]] +name = "p48" +version = "0.1.0" + +[[package]] +name = "p5" +version = "0.1.0" +dependencies = [ + "num-integer", +] + +[[package]] +name = "p51" +version = "0.1.0" + +[[package]] +name = "p52" +version = "0.1.0" + +[[package]] +name = "p53" +version = "0.1.0" +dependencies = [ + "primal", +] + +[[package]] +name = "p6" +version = "0.1.0" + +[[package]] +name = "p614" +version = "0.1.0" +dependencies = [ + "num-bigint", +] + +[[package]] +name = "p67" +version = "0.1.0" + +[[package]] +name = "p7" +version = "0.1.0" +dependencies = [ + "primes", +] + +[[package]] +name = "p76" +version = "0.1.0" +dependencies = [ + "num-bigint", +] + +[[package]] +name = "p8" +version = "0.1.0" + +[[package]] +name = "p87" +version = "0.1.0" + +[[package]] +name = "p9" +version = "0.1.0" + +[[package]] +name = "primal" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e5f354948532e6017fc91f9a5ff5ba1be0dabd3a0c9e9c417969cd4c1ad6e8" +dependencies = [ + "primal-check", + "primal-estimate", + "primal-sieve", +] + +[[package]] +name = "primal-bit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "252429dbb8aeacc3233df500dc3a6a367bf28eb3a711272884d7540a7b636055" +dependencies = [ + "hamming", +] + +[[package]] +name = "primal-check" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc0d895b311e3af9902528fbb8f928688abbd95872819320517cc24ca6b2bd08" +dependencies = [ + "num-integer", +] + +[[package]] +name = "primal-estimate" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a432100a0b3a61085e75b5f89e9f42de73c0acb7dea5038b893697918105d822" + +[[package]] +name = "primal-sieve" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e982796d82203351983d3602a8d6372d1d7894e86960047ba0d4b7426a5edd3" +dependencies = [ + "primal-bit", + "primal-estimate", + "smallvec", +] + +[[package]] +name = "primes" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0466ef49edd4a5a4bc9d62804a34e89366810bd8bfc3ed537101e3d099f245c5" + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "projecteuler" +version = "0.1.0" + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rayon" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "smallvec" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" + +[[package]] +name = "syn" +version = "2.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..5297a46 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "projecteuler" +version = "0.1.0" +edition = "2024" + +[workspace] +members = ["problems/*"] + +[workspace.dependencies] +anyhow = "*" +factorial = "*" +num-bigint = "*" +primal = "*" +itertools = "*" +rayon = "*" diff --git a/problems/p1/Cargo.toml b/problems/p1/Cargo.toml new file mode 100644 index 0000000..8fa63ad --- /dev/null +++ b/problems/p1/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p1" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p1/src/main.rs b/problems/p1/src/main.rs new file mode 100644 index 0000000..f4cf5f1 --- /dev/null +++ b/problems/p1/src/main.rs @@ -0,0 +1,18 @@ +fn multiples(input: u32) -> u32 { + let mut sum = 0; + for i in 1..input { + if i % 3 == 0 { + sum += i; + continue; + } + if i % 5 == 0 { + sum += i; + continue; + } + } + sum +} + +fn main() { + println!("10: {}", multiples(1000)); +} diff --git a/problems/p10/Cargo.toml b/problems/p10/Cargo.toml new file mode 100644 index 0000000..a6ecc5f --- /dev/null +++ b/problems/p10/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p10" +version = "0.1.0" +edition = "2024" + +[dependencies] +primes = "0.4.0" diff --git a/problems/p10/src/main.rs b/problems/p10/src/main.rs new file mode 100644 index 0000000..4db7134 --- /dev/null +++ b/problems/p10/src/main.rs @@ -0,0 +1,14 @@ +use primes::{PrimeSet, Sieve}; + +fn main() { + let mut pset = Sieve::new(); + let mut sum: u64 = 0; + for i in pset.iter() { + if i < 2000000 { + sum += i; + } else { + break; + } + } + println!("{sum}"); +} diff --git a/problems/p102/Cargo.toml b/problems/p102/Cargo.toml new file mode 100644 index 0000000..da9803e --- /dev/null +++ b/problems/p102/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p102" +version = "0.1.0" +edition = "2024" + +[dependencies] +rayon = "1.11.0" diff --git a/problems/p102/p102_triangles.txt b/problems/p102/p102_triangles.txt new file mode 100644 index 0000000..3f01a1a --- /dev/null +++ b/problems/p102/p102_triangles.txt @@ -0,0 +1,1000 @@ +-340,495,-153,-910,835,-947 +-175,41,-421,-714,574,-645 +-547,712,-352,579,951,-786 +419,-864,-83,650,-399,171 +-429,-89,-357,-930,296,-29 +-734,-702,823,-745,-684,-62 +-971,762,925,-776,-663,-157 +162,570,628,485,-807,-896 +641,91,-65,700,887,759 +215,-496,46,-931,422,-30 +-119,359,668,-609,-358,-494 +440,929,968,214,760,-857 +-700,785,838,29,-216,411 +-770,-458,-325,-53,-505,633 +-752,-805,349,776,-799,687 +323,5,561,-36,919,-560 +-907,358,264,320,204,274 +-728,-466,350,969,292,-345 +940,836,272,-533,748,185 +411,998,813,520,316,-949 +-152,326,658,-762,148,-651 +330,507,-9,-628,101,174 +551,-496,772,-541,-702,-45 +-164,-489,-90,322,631,-59 +673,366,-4,-143,-606,-704 +428,-609,801,-449,740,-269 +453,-924,-785,-346,-853,111 +-738,555,-181,467,-426,-20 +958,-692,784,-343,505,-569 +620,27,263,54,-439,-726 +804,87,998,859,871,-78 +-119,-453,-709,-292,-115,-56 +-626,138,-940,-476,-177,-274 +-11,160,142,588,446,158 +538,727,550,787,330,810 +420,-689,854,-546,337,516 +872,-998,-607,748,473,-192 +653,440,-516,-985,808,-857 +374,-158,331,-940,-338,-641 +137,-925,-179,771,734,-715 +-314,198,-115,29,-641,-39 +759,-574,-385,355,590,-603 +-189,-63,-168,204,289,305 +-182,-524,-715,-621,911,-255 +331,-816,-833,471,168,126 +-514,581,-855,-220,-731,-507 +129,169,576,651,-87,-458 +783,-444,-881,658,-266,298 +603,-430,-598,585,368,899 +43,-724,962,-376,851,409 +-610,-646,-883,-261,-482,-881 +-117,-237,978,641,101,-747 +579,125,-715,-712,208,534 +672,-214,-762,372,874,533 +-564,965,38,715,367,242 +500,951,-700,-981,-61,-178 +-382,-224,-959,903,-282,-60 +-355,295,426,-331,-591,655 +892,128,958,-271,-993,274 +-454,-619,302,138,-790,-874 +-642,601,-574,159,-290,-318 +266,-109,257,-686,54,975 +162,628,-478,840,264,-266 +466,-280,982,1,904,-810 +721,839,730,-807,777,981 +-129,-430,748,263,943,96 +434,-94,410,-990,249,-704 +237,42,122,-732,44,-51 +909,-116,-229,545,292,717 +824,-768,-807,-370,-262,30 +675,58,332,-890,-651,791 +363,825,-717,254,684,240 +405,-715,900,166,-589,422 +-476,686,-830,-319,634,-807 +633,837,-971,917,-764,207 +-116,-44,-193,-70,908,809 +-26,-252,998,408,70,-713 +-601,645,-462,842,-644,-591 +-160,653,274,113,-138,687 +369,-273,-181,925,-167,-693 +-338,135,480,-967,-13,-840 +-90,-270,-564,695,161,907 +607,-430,869,-713,461,-469 +919,-165,-776,522,606,-708 +-203,465,288,207,-339,-458 +-453,-534,-715,975,838,-677 +-973,310,-350,934,546,-805 +-835,385,708,-337,-594,-772 +-14,914,900,-495,-627,594 +833,-713,-213,578,-296,699 +-27,-748,484,455,915,291 +270,889,739,-57,442,-516 +119,811,-679,905,184,130 +-678,-469,925,553,612,482 +101,-571,-732,-842,644,588 +-71,-737,566,616,957,-663 +-634,-356,90,-207,936,622 +598,443,964,-895,-58,529 +847,-467,929,-742,91,10 +-633,829,-780,-408,222,-30 +-818,57,275,-38,-746,198 +-722,-825,-549,597,-391,99 +-570,908,430,873,-103,-360 +342,-681,512,434,542,-528 +297,850,479,609,543,-357 +9,784,212,548,56,859 +-152,560,-240,-969,-18,713 +140,-133,34,-635,250,-163 +-272,-22,-169,-662,989,-604 +471,-765,355,633,-742,-118 +-118,146,942,663,547,-376 +583,16,162,264,715,-33 +-230,-446,997,-838,561,555 +372,397,-729,-318,-276,649 +92,982,-970,-390,-922,922 +-981,713,-951,-337,-669,670 +-999,846,-831,-504,7,-128 +455,-954,-370,682,-510,45 +822,-960,-892,-385,-662,314 +-668,-686,-367,-246,530,-341 +-723,-720,-926,-836,-142,757 +-509,-134,384,-221,-873,-639 +-803,-52,-706,-669,373,-339 +933,578,631,-616,770,555 +741,-564,-33,-605,-576,275 +-715,445,-233,-730,734,-704 +120,-10,-266,-685,-490,-17 +-232,-326,-457,-946,-457,-116 +811,52,639,826,-200,147 +-329,279,293,612,943,955 +-721,-894,-393,-969,-642,453 +-688,-826,-352,-75,371,79 +-809,-979,407,497,858,-248 +-485,-232,-242,-582,-81,849 +141,-106,123,-152,806,-596 +-428,57,-992,811,-192,478 +864,393,122,858,255,-876 +-284,-780,240,457,354,-107 +956,605,-477,44,26,-678 +86,710,-533,-815,439,327 +-906,-626,-834,763,426,-48 +201,-150,-904,652,475,412 +-247,149,81,-199,-531,-148 +923,-76,-353,175,-121,-223 +427,-674,453,472,-410,585 +931,776,-33,85,-962,-865 +-655,-908,-902,208,869,792 +-316,-102,-45,-436,-222,885 +-309,768,-574,653,745,-975 +896,27,-226,993,332,198 +323,655,-89,260,240,-902 +501,-763,-424,793,813,616 +993,375,-938,-621,672,-70 +-880,-466,-283,770,-824,143 +63,-283,886,-142,879,-116 +-964,-50,-521,-42,-306,-161 +724,-22,866,-871,933,-383 +-344,135,282,966,-80,917 +-281,-189,420,810,362,-582 +-515,455,-588,814,162,332 +555,-436,-123,-210,869,-943 +589,577,232,286,-554,876 +-773,127,-58,-171,-452,125 +-428,575,906,-232,-10,-224 +437,276,-335,-348,605,878 +-964,511,-386,-407,168,-220 +307,513,912,-463,-423,-416 +-445,539,273,886,-18,760 +-396,-585,-670,414,47,364 +143,-506,754,906,-971,-203 +-544,472,-180,-541,869,-465 +-779,-15,-396,890,972,-220 +-430,-564,503,182,-119,456 +89,-10,-739,399,506,499 +954,162,-810,-973,127,870 +890,952,-225,158,828,237 +-868,952,349,465,574,750 +-915,369,-975,-596,-395,-134 +-135,-601,575,582,-667,640 +413,890,-560,-276,-555,-562 +-633,-269,561,-820,-624,499 +371,-92,-784,-593,864,-717 +-971,655,-439,367,754,-951 +172,-347,36,279,-247,-402 +633,-301,364,-349,-683,-387 +-780,-211,-713,-948,-648,543 +72,58,762,-465,-66,462 +78,502,781,-832,713,836 +-431,-64,-484,-392,208,-343 +-64,101,-29,-860,-329,844 +398,391,828,-858,700,395 +578,-896,-326,-604,314,180 +97,-321,-695,185,-357,852 +854,839,283,-375,951,-209 +194,96,-564,-847,162,524 +-354,532,494,621,580,560 +419,-678,-450,926,-5,-924 +-661,905,519,621,-143,394 +-573,268,296,-562,-291,-319 +-211,266,-196,158,564,-183 +18,-585,-398,777,-581,864 +790,-894,-745,-604,-418,70 +848,-339,150,773,11,851 +-954,-809,-53,-20,-648,-304 +658,-336,-658,-905,853,407 +-365,-844,350,-625,852,-358 +986,-315,-230,-159,21,180 +-15,599,45,-286,-941,847 +-613,-68,184,639,-987,550 +334,675,-56,-861,923,340 +-848,-596,960,231,-28,-34 +707,-811,-994,-356,-167,-171 +-470,-764,72,576,-600,-204 +379,189,-542,-576,585,800 +440,540,-445,-563,379,-334 +-155,64,514,-288,853,106 +-304,751,481,-520,-708,-694 +-709,132,594,126,-844,63 +723,471,421,-138,-962,892 +-440,-263,39,513,-672,-954 +775,809,-581,330,752,-107 +-376,-158,335,-708,-514,578 +-343,-769,456,-187,25,413 +548,-877,-172,300,-500,928 +938,-102,423,-488,-378,-969 +-36,564,-55,131,958,-800 +-322,511,-413,503,700,-847 +-966,547,-88,-17,-359,-67 +637,-341,-437,-181,527,-153 +-74,449,-28,3,485,189 +-997,658,-224,-948,702,-807 +-224,736,-896,127,-945,-850 +-395,-106,439,-553,-128,124 +-841,-445,-758,-572,-489,212 +633,-327,13,-512,952,771 +-940,-171,-6,-46,-923,-425 +-142,-442,-817,-998,843,-695 +340,847,-137,-920,-988,-658 +-653,217,-679,-257,651,-719 +-294,365,-41,342,74,-892 +690,-236,-541,494,408,-516 +180,-807,225,790,494,59 +707,605,-246,656,284,271 +65,294,152,824,442,-442 +-321,781,-540,341,316,415 +420,371,-2,545,995,248 +56,-191,-604,971,615,449 +-981,-31,510,592,-390,-362 +-317,-968,913,365,97,508 +832,63,-864,-510,86,202 +-483,456,-636,340,-310,676 +981,-847,751,-508,-962,-31 +-157,99,73,797,63,-172 +220,858,872,924,866,-381 +996,-169,805,321,-164,971 +896,11,-625,-973,-782,76 +578,-280,730,-729,307,-905 +-580,-749,719,-698,967,603 +-821,874,-103,-623,662,-491 +-763,117,661,-644,672,-607 +592,787,-798,-169,-298,690 +296,644,-526,-762,-447,665 +534,-818,852,-120,57,-379 +-986,-549,-329,294,954,258 +-133,352,-660,-77,904,-356 +748,343,215,500,317,-277 +311,7,910,-896,-809,795 +763,-602,-753,313,-352,917 +668,619,-474,-597,-650,650 +-297,563,-701,-987,486,-902 +-461,-740,-657,233,-482,-328 +-446,-250,-986,-458,-629,520 +542,-49,-327,-469,257,-947 +121,-575,-634,-143,-184,521 +30,504,455,-645,-229,-945 +-12,-295,377,764,771,125 +-686,-133,225,-25,-376,-143 +-6,-46,338,270,-405,-872 +-623,-37,582,467,963,898 +-804,869,-477,420,-475,-303 +94,41,-842,-193,-768,720 +-656,-918,415,645,-357,460 +-47,-486,-911,468,-608,-686 +-158,251,419,-394,-655,-895 +272,-695,979,508,-358,959 +-776,650,-918,-467,-690,-534 +-85,-309,-626,167,-366,-429 +-880,-732,-186,-924,970,-875 +517,645,-274,962,-804,544 +721,402,104,640,478,-499 +198,684,-134,-723,-452,-905 +-245,745,239,238,-826,441 +-217,206,-32,462,-981,-895 +-51,989,526,-173,560,-676 +-480,-659,-976,-580,-727,466 +-996,-90,-995,158,-239,642 +302,288,-194,-294,17,924 +-943,969,-326,114,-500,103 +-619,163,339,-880,230,421 +-344,-601,-795,557,565,-779 +590,345,-129,-202,-125,-58 +-777,-195,159,674,775,411 +-939,312,-665,810,121,855 +-971,254,712,815,452,581 +442,-9,327,-750,61,757 +-342,869,869,-160,390,-772 +620,601,565,-169,-69,-183 +-25,924,-817,964,321,-970 +-64,-6,-133,978,825,-379 +601,436,-24,98,-115,940 +-97,502,614,-574,922,513 +-125,262,-946,695,99,-220 +429,-721,719,-694,197,-558 +326,689,-70,-908,-673,338 +-468,-856,-902,-254,-358,305 +-358,530,542,355,-253,-47 +-438,-74,-362,963,988,788 +137,717,467,622,319,-380 +-86,310,-336,851,918,-288 +721,395,646,-53,255,-425 +255,175,912,84,-209,878 +-632,-485,-400,-357,991,-608 +235,-559,992,-297,857,-591 +87,-71,148,130,647,578 +-290,-584,-639,-788,-21,592 +386,984,625,-731,-993,-336 +-538,634,-209,-828,-150,-774 +-754,-387,607,-781,976,-199 +412,-798,-664,295,709,-537 +-412,932,-880,-232,561,852 +-656,-358,-198,-964,-433,-848 +-762,-668,-632,186,-673,-11 +-876,237,-282,-312,-83,682 +403,73,-57,-436,-622,781 +-587,873,798,976,-39,329 +-369,-622,553,-341,817,794 +-108,-616,920,-849,-679,96 +290,-974,234,239,-284,-321 +-22,394,-417,-419,264,58 +-473,-551,69,923,591,-228 +-956,662,-113,851,-581,-794 +-258,-681,413,-471,-637,-817 +-866,926,992,-653,-7,794 +556,-350,602,917,831,-610 +188,245,-906,361,492,174 +-720,384,-818,329,638,-666 +-246,846,890,-325,-59,-850 +-118,-509,620,-762,-256,15 +-787,-536,-452,-338,-399,813 +458,560,525,-311,-608,-419 +494,-811,-825,-127,-812,894 +-801,890,-629,-860,574,925 +-709,-193,-213,138,-410,-403 +861,91,708,-187,5,-222 +789,646,777,154,90,-49 +-267,-830,-114,531,591,-698 +-126,-82,881,-418,82,652 +-894,130,-726,-935,393,-815 +-142,563,654,638,-712,-597 +-759,60,-23,977,100,-765 +-305,595,-570,-809,482,762 +-161,-267,53,963,998,-529 +-300,-57,798,353,703,486 +-990,696,-764,699,-565,719 +-232,-205,566,571,977,369 +740,865,151,-817,-204,-293 +94,445,-768,229,537,-406 +861,620,37,-424,-36,656 +390,-369,952,733,-464,569 +-482,-604,959,554,-705,-626 +-396,-615,-991,108,272,-723 +143,780,535,142,-917,-147 +138,-629,-217,-908,905,115 +915,103,-852,64,-468,-642 +570,734,-785,-268,-326,-759 +738,531,-332,586,-779,24 +870,440,-217,473,-383,415 +-296,-333,-330,-142,-924,950 +118,120,-35,-245,-211,-652 +61,634,153,-243,838,789 +726,-582,210,105,983,537 +-313,-323,758,234,29,848 +-847,-172,-593,733,-56,617 +54,255,-512,156,-575,675 +-873,-956,-148,623,95,200 +700,-370,926,649,-978,157 +-639,-202,719,130,747,222 +194,-33,955,943,505,114 +-226,-790,28,-930,827,783 +-392,-74,-28,714,218,-612 +209,626,-888,-683,-912,495 +487,751,614,933,631,445 +-348,-34,-411,-106,835,321 +-689,872,-29,-800,312,-542 +-52,566,827,570,-862,-77 +471,992,309,-402,389,912 +24,520,-83,-51,555,503 +-265,-317,283,-970,-472,690 +606,526,137,71,-651,150 +217,-518,663,66,-605,-331 +-562,232,-76,-503,205,-323 +842,-521,546,285,625,-186 +997,-927,344,909,-546,974 +-677,419,81,121,-705,771 +719,-379,-944,-797,784,-155 +-378,286,-317,-797,-111,964 +-288,-573,784,80,-532,-646 +-77,407,-248,-797,769,-816 +-24,-637,287,-858,-927,-333 +-902,37,894,-823,141,684 +125,467,-177,-516,686,399 +-321,-542,641,-590,527,-224 +-400,-712,-876,-208,632,-543 +-676,-429,664,-242,-269,922 +-608,-273,-141,930,687,380 +786,-12,498,494,310,326 +-739,-617,606,-960,804,188 +384,-368,-243,-350,-459,31 +-550,397,320,-868,328,-279 +969,-179,853,864,-110,514 +910,793,302,-822,-285,488 +-605,-128,218,-283,-17,-227 +16,324,667,708,750,3 +485,-813,19,585,71,930 +-218,816,-687,-97,-732,-360 +-497,-151,376,-23,3,315 +-412,-989,-610,-813,372,964 +-878,-280,87,381,-311,69 +-609,-90,-731,-679,150,585 +889,27,-162,605,75,-770 +448,617,-988,0,-103,-504 +-800,-537,-69,627,608,-668 +534,686,-664,942,830,920 +-238,775,495,932,-793,497 +-343,958,-914,-514,-691,651 +568,-136,208,359,728,28 +286,912,-794,683,556,-102 +-638,-629,-484,445,-64,-497 +58,505,-801,-110,872,632 +-390,777,353,267,976,369 +-993,515,105,-133,358,-572 +964,996,355,-212,-667,38 +-725,-614,-35,365,132,-196 +237,-536,-416,-302,312,477 +-664,574,-210,224,48,-925 +869,-261,-256,-240,-3,-698 +712,385,32,-34,916,-315 +895,-409,-100,-346,728,-624 +-806,327,-450,889,-781,-939 +-586,-403,698,318,-939,899 +557,-57,-920,659,333,-51 +-441,232,-918,-205,246,1 +783,167,-797,-595,245,-736 +-36,-531,-486,-426,-813,-160 +777,-843,817,313,-228,-572 +735,866,-309,-564,-81,190 +-413,645,101,719,-719,218 +-83,164,767,796,-430,-459 +122,779,-15,-295,-96,-892 +462,379,70,548,834,-312 +-630,-534,124,187,-737,114 +-299,-604,318,-591,936,826 +-879,218,-642,-483,-318,-866 +-691,62,-658,761,-895,-854 +-822,493,687,569,910,-202 +-223,784,304,-5,541,925 +-914,541,737,-662,-662,-195 +-622,615,414,358,881,-878 +339,745,-268,-968,-280,-227 +-364,855,148,-709,-827,472 +-890,-532,-41,664,-612,577 +-702,-859,971,-722,-660,-920 +-539,-605,737,149,973,-802 +800,42,-448,-811,152,511 +-933,377,-110,-105,-374,-937 +-766,152,482,120,-308,390 +-568,775,-292,899,732,890 +-177,-317,-502,-259,328,-511 +612,-696,-574,-660,132,31 +-119,563,-805,-864,179,-672 +425,-627,183,-331,839,318 +-711,-976,-749,152,-916,261 +181,-63,497,211,262,406 +-537,700,-859,-765,-928,77 +892,832,231,-749,-82,613 +816,216,-642,-216,-669,-912 +-6,624,-937,-370,-344,268 +737,-710,-869,983,-324,-274 +565,952,-547,-158,374,-444 +51,-683,645,-845,515,636 +-953,-631,114,-377,-764,-144 +-8,470,-242,-399,-675,-730 +-540,689,-20,47,-607,590 +-329,-710,-779,942,-388,979 +123,829,674,122,203,563 +46,782,396,-33,386,610 +872,-846,-523,-122,-55,-190 +388,-994,-525,974,127,596 +781,-680,796,-34,-959,-62 +-749,173,200,-384,-745,-446 +379,618,136,-250,-224,970 +-58,240,-921,-760,-901,-626 +366,-185,565,-100,515,688 +489,999,-893,-263,-637,816 +838,-496,-316,-513,419,479 +107,676,-15,882,98,-397 +-999,941,-903,-424,670,-325 +171,-979,835,178,169,-984 +-609,-607,378,-681,184,402 +-316,903,-575,-800,224,983 +591,-18,-460,551,-167,918 +-756,405,-117,441,163,-320 +456,24,6,881,-836,-539 +-489,-585,915,651,-892,-382 +-177,-122,73,-711,-386,591 +181,724,530,686,-131,241 +737,288,886,216,233,33 +-548,-386,-749,-153,-85,-982 +-835,227,904,160,-99,25 +-9,-42,-162,728,840,-963 +217,-763,870,771,47,-846 +-595,808,-491,556,337,-900 +-134,281,-724,441,-134,708 +-789,-508,651,-962,661,315 +-839,-923,339,402,41,-487 +300,-790,48,703,-398,-811 +955,-51,462,-685,960,-717 +910,-880,592,-255,-51,-776 +-885,169,-793,368,-565,458 +-905,940,-492,-630,-535,-988 +245,797,763,869,-82,550 +-310,38,-933,-367,-650,824 +-95,32,-83,337,226,990 +-218,-975,-191,-208,-785,-293 +-672,-953,517,-901,-247,465 +681,-148,261,-857,544,-923 +640,341,446,-618,195,769 +384,398,-846,365,671,815 +578,576,-911,907,762,-859 +548,-428,144,-630,-759,-146 +710,-73,-700,983,-97,-889 +-46,898,-973,-362,-817,-717 +151,-81,-125,-900,-478,-154 +483,615,-537,-932,181,-68 +786,-223,518,25,-306,-12 +-422,268,-809,-683,635,468 +983,-734,-694,-608,-110,4 +-786,-196,749,-354,137,-8 +-181,36,668,-200,691,-973 +-629,-838,692,-736,437,-871 +-208,-536,-159,-596,8,197 +-3,370,-686,170,913,-376 +44,-998,-149,-993,-200,512 +-519,136,859,497,536,434 +77,-985,972,-340,-705,-837 +-381,947,250,360,344,322 +-26,131,699,750,707,384 +-914,655,299,193,406,955 +-883,-921,220,595,-546,794 +-599,577,-569,-404,-704,489 +-594,-963,-624,-460,880,-760 +-603,88,-99,681,55,-328 +976,472,139,-453,-531,-860 +192,-290,513,-89,666,432 +417,487,575,293,567,-668 +655,711,-162,449,-980,972 +-505,664,-685,-239,603,-592 +-625,-802,-67,996,384,-636 +365,-593,522,-666,-200,-431 +-868,708,560,-860,-630,-355 +-702,785,-637,-611,-597,960 +-137,-696,-93,-803,408,406 +891,-123,-26,-609,-610,518 +133,-832,-198,555,708,-110 +791,617,-69,487,696,315 +-900,694,-565,517,-269,-416 +914,135,-781,600,-71,-600 +991,-915,-422,-351,-837,313 +-840,-398,-302,21,590,146 +62,-558,-702,-384,-625,831 +-363,-426,-924,-496,792,-908 +73,361,-817,-466,400,922 +-626,-164,-626,860,-524,286 +255,26,-944,809,-606,986 +-457,-256,-103,50,-867,-871 +-223,803,196,480,612,136 +-820,-928,700,780,-977,721 +717,332,53,-933,-128,793 +-602,-648,562,593,890,702 +-469,-875,-527,911,-475,-222 +110,-281,-552,-536,-816,596 +-981,654,413,-981,-75,-95 +-754,-742,-515,894,-220,-344 +795,-52,156,408,-603,76 +474,-157,423,-499,-807,-791 +260,688,40,-52,702,-122 +-584,-517,-390,-881,302,-504 +61,797,665,708,14,668 +366,166,458,-614,564,-983 +72,539,-378,796,381,-824 +-485,201,-588,842,736,379 +-149,-894,-298,705,-303,-406 +660,-935,-580,521,93,633 +-382,-282,-375,-841,-828,171 +-567,743,-100,43,144,122 +-281,-786,-749,-551,296,304 +11,-426,-792,212,857,-175 +594,143,-699,289,315,137 +341,596,-390,107,-631,-804 +-751,-636,-424,-854,193,651 +-145,384,749,675,-786,517 +224,-865,-323,96,-916,258 +-309,403,-388,826,35,-270 +-942,709,222,158,-699,-103 +-589,842,-997,29,-195,-210 +264,426,566,145,-217,623 +217,965,507,-601,-453,507 +-206,307,-982,4,64,-292 +676,-49,-38,-701,550,883 +5,-850,-438,659,745,-773 +933,238,-574,-570,91,-33 +-866,121,-928,358,459,-843 +-568,-631,-352,-580,-349,189 +-737,849,-963,-486,-662,970 +135,334,-967,-71,-365,-792 +789,21,-227,51,990,-275 +240,412,-886,230,591,256 +-609,472,-853,-754,959,661 +401,521,521,314,929,982 +-499,784,-208,71,-302,296 +-557,-948,-553,-526,-864,793 +270,-626,828,44,37,14 +-412,224,617,-593,502,699 +41,-908,81,562,-849,163 +165,917,761,-197,331,-341 +-687,314,799,755,-969,648 +-164,25,578,439,-334,-576 +213,535,874,-177,-551,24 +-689,291,-795,-225,-496,-125 +465,461,558,-118,-568,-909 +567,660,-810,46,-485,878 +-147,606,685,-690,-774,984 +568,-886,-43,854,-738,616 +-800,386,-614,585,764,-226 +-518,23,-225,-732,-79,440 +-173,-291,-689,636,642,-447 +-598,-16,227,410,496,211 +-474,-930,-656,-321,-420,36 +-435,165,-819,555,540,144 +-969,149,828,568,394,648 +65,-848,257,720,-625,-851 +981,899,275,635,465,-877 +80,290,792,760,-191,-321 +-605,-858,594,33,706,593 +585,-472,318,-35,354,-927 +-365,664,803,581,-965,-814 +-427,-238,-480,146,-55,-606 +879,-193,250,-890,336,117 +-226,-322,-286,-765,-836,-218 +-913,564,-667,-698,937,283 +872,-901,810,-623,-52,-709 +473,171,717,38,-429,-644 +225,824,-219,-475,-180,234 +-530,-797,-948,238,851,-623 +85,975,-363,529,598,28 +-799,166,-804,210,-769,851 +-687,-158,885,736,-381,-461 +447,592,928,-514,-515,-661 +-399,-777,-493,80,-544,-78 +-884,631,171,-825,-333,551 +191,268,-577,676,137,-33 +212,-853,709,798,583,-56 +-908,-172,-540,-84,-135,-56 +303,311,406,-360,-240,811 +798,-708,824,59,234,-57 +491,693,-74,585,-85,877 +509,-65,-936,329,-51,722 +-122,858,-52,467,-77,-609 +850,760,547,-495,-953,-952 +-460,-541,890,910,286,724 +-914,843,-579,-983,-387,-460 +989,-171,-877,-326,-899,458 +846,175,-915,540,-1000,-982 +-852,-920,-306,496,530,-18 +338,-991,160,85,-455,-661 +-186,-311,-460,-563,-231,-414 +-932,-302,959,597,793,748 +-366,-402,-788,-279,514,53 +-940,-956,447,-956,211,-285 +564,806,-911,-914,934,754 +575,-858,-277,15,409,-714 +848,462,100,-381,135,242 +330,718,-24,-190,860,-78 +479,458,941,108,-866,-653 +212,980,962,-962,115,841 +-827,-474,-206,881,323,765 +506,-45,-30,-293,524,-133 +832,-173,547,-852,-561,-842 +-397,-661,-708,819,-545,-228 +521,51,-489,852,36,-258 +227,-164,189,465,-987,-882 +-73,-997,641,-995,449,-615 +151,-995,-638,415,257,-400 +-663,-297,-748,537,-734,198 +-585,-401,-81,-782,-80,-105 +99,-21,238,-365,-704,-368 +45,416,849,-211,-371,-1 +-404,-443,795,-406,36,-933 +272,-363,981,-491,-380,77 +713,-342,-366,-849,643,911 +-748,671,-537,813,961,-200 +-194,-909,703,-662,-601,188 +281,500,724,286,267,197 +-832,847,-595,820,-316,637 +520,521,-54,261,923,-10 +4,-808,-682,-258,441,-695 +-793,-107,-969,905,798,446 +-108,-739,-590,69,-855,-365 +380,-623,-930,817,468,713 +759,-849,-236,433,-723,-931 +95,-320,-686,124,-69,-329 +-655,518,-210,-523,284,-866 +144,303,639,70,-171,269 +173,-333,947,-304,55,40 +274,878,-482,-888,-835,375 +-982,-854,-36,-218,-114,-230 +905,-979,488,-485,-479,114 +877,-157,553,-530,-47,-321 +350,664,-881,442,-220,-284 +434,-423,-365,878,-726,584 +535,909,-517,-447,-660,-141 +-966,191,50,353,182,-642 +-785,-634,123,-907,-162,511 +146,-850,-214,814,-704,25 +692,1,521,492,-637,274 +-662,-372,-313,597,983,-647 +-962,-526,68,-549,-819,231 +740,-890,-318,797,-666,948 +-190,-12,-468,-455,948,284 +16,478,-506,-888,628,-154 +272,630,-976,308,433,3 +-169,-391,-132,189,302,-388 +109,-784,474,-167,-265,-31 +-177,-532,283,464,421,-73 +650,635,592,-138,1,-387 +-932,703,-827,-492,-355,686 +586,-311,340,-618,645,-434 +-951,736,647,-127,-303,590 +188,444,903,718,-931,500 +-872,-642,-296,-571,337,241 +23,65,152,125,880,470 +512,823,-42,217,823,-263 +180,-831,-380,886,607,762 +722,443,-149,-216,-115,759 +-19,660,-36,901,923,231 +562,-322,-626,-968,194,-825 +204,-920,938,784,362,150 +-410,-266,-715,559,-672,124 +-198,446,-140,454,-461,-447 +83,-346,830,-493,-759,-382 +-881,601,581,234,-134,-925 +-494,914,-42,899,235,629 +-390,50,956,437,774,-700 +-514,514,44,-512,-576,-313 +63,-688,808,-534,-570,-399 +-726,572,-896,102,-294,-28 +-688,757,401,406,955,-511 +-283,423,-485,480,-767,908 +-541,952,-594,116,-854,451 +-273,-796,236,625,-626,257 +-407,-493,373,826,-309,297 +-750,955,-476,641,-809,713 +8,415,695,226,-111,2 +733,209,152,-920,401,995 +921,-103,-919,66,871,-947 +-907,89,-869,-214,851,-559 +-307,748,524,-755,314,-711 +188,897,-72,-763,482,103 +545,-821,-232,-596,-334,-754 +-217,-788,-820,388,-200,-662 +779,160,-723,-975,-142,-998 +-978,-519,-78,-981,842,904 +-504,-736,-295,21,-472,-482 +391,115,-705,574,652,-446 +813,-988,865,830,-263,487 +194,80,774,-493,-761,-872 +-415,-284,-803,7,-810,670 +-484,-4,881,-872,55,-852 +-379,822,-266,324,-48,748 +-304,-278,406,-60,959,-89 +404,756,577,-643,-332,658 +291,460,125,491,-312,83 +311,-734,-141,582,282,-557 +-450,-661,-981,710,-177,794 +328,264,-787,971,-743,-407 +-622,518,993,-241,-738,229 +273,-826,-254,-917,-710,-111 +809,770,96,368,-818,725 +-488,773,502,-342,534,745 +-28,-414,236,-315,-484,363 +179,-466,-566,713,-683,56 +560,-240,-597,619,916,-940 +893,473,872,-868,-642,-461 +799,489,383,-321,-776,-833 +980,490,-508,764,-512,-426 +917,961,-16,-675,440,559 +-812,212,784,-987,-132,554 +-886,454,747,806,190,231 +910,341,21,-66,708,725 +29,929,-831,-494,-303,389 +-103,492,-271,-174,-515,529 +-292,119,419,788,247,-951 +483,543,-347,-673,664,-549 +-926,-871,-437,337,162,-877 +299,472,-771,5,-88,-643 +-103,525,-725,-998,264,22 +-505,708,550,-545,823,347 +-738,931,59,147,-156,-259 +456,968,-162,889,132,-911 +535,120,968,-517,-864,-541 +24,-395,-593,-766,-565,-332 +834,611,825,-576,280,629 +211,-548,140,-278,-592,929 +-999,-240,-63,-78,793,573 +-573,160,450,987,529,322 +63,353,315,-187,-461,577 +189,-950,-247,656,289,241 +209,-297,397,664,-805,484 +-655,452,435,-556,917,874 +253,-756,262,-888,-778,-214 +793,-451,323,-251,-401,-458 +-396,619,-651,-287,-668,-781 +698,720,-349,742,-807,546 +738,280,680,279,-540,858 +-789,387,530,-36,-551,-491 +162,579,-427,-272,228,710 +689,356,917,-580,729,217 +-115,-638,866,424,-82,-194 +411,-338,-917,172,227,-29 +-612,63,630,-976,-64,-204 +-200,911,583,-571,682,-579 +91,298,396,-183,788,-955 +141,-873,-277,149,-396,916 +321,958,-136,573,541,-777 +797,-909,-469,-877,988,-653 +784,-198,129,883,-203,399 +-68,-810,223,-423,-467,-512 +531,-445,-603,-997,-841,641 +-274,-242,174,261,-636,-158 +-574,494,-796,-798,-798,99 +95,-82,-613,-954,-753,986 +-883,-448,-864,-401,938,-392 +913,930,-542,-988,310,410 +506,-99,43,512,790,-222 +724,31,49,-950,260,-134 +-287,-947,-234,-700,56,588 +-33,782,-144,948,105,-791 +548,-546,-652,-293,881,-520 +691,-91,76,991,-631,742 +-520,-429,-244,-296,724,-48 +778,646,377,50,-188,56 +-895,-507,-898,-165,-674,652 +654,584,-634,177,-349,-620 +114,-980,355,62,182,975 +516,9,-442,-298,274,-579 +-238,262,-431,-896,506,-850 +47,748,846,821,-537,-293 +839,726,593,285,-297,840 +634,-486,468,-304,-887,-567 +-864,914,296,-124,335,233 +88,-253,-523,-956,-554,803 +-587,417,281,-62,-409,-363 +-136,-39,-292,-768,-264,876 +-127,506,-891,-331,-744,-430 +778,584,-750,-129,-479,-94 +-876,-771,-987,-757,180,-641 +-777,-694,411,-87,329,190 +-347,-999,-882,158,-754,232 +-105,918,188,237,-110,-591 +-209,703,-838,77,838,909 +-995,-339,-762,750,860,472 +185,271,-289,173,811,-300 +2,65,-656,-22,36,-139 +765,-210,883,974,961,-905 +-212,295,-615,-840,77,474 +211,-910,-440,703,-11,859 +-559,-4,-196,841,-277,969 +-73,-159,-887,126,978,-371 +-569,633,-423,-33,512,-393 +503,143,-383,-109,-649,-998 +-663,339,-317,-523,-2,596 +690,-380,570,378,-652,132 +72,-744,-930,399,-525,935 +865,-983,115,37,995,826 +594,-621,-872,443,188,-241 +-1000,291,754,234,-435,-869 +-868,901,654,-907,59,181 +-868,-793,-431,596,-446,-564 +900,-944,-680,-796,902,-366 +331,430,943,853,-851,-942 +315,-538,-354,-909,139,721 +170,-884,-225,-818,-808,-657 +-279,-34,-533,-871,-972,552 +691,-986,-800,-950,654,-747 +603,988,899,841,-630,591 +876,-949,809,562,602,-536 +-693,363,-189,495,738,-1000 +-383,431,-633,297,665,959 +-740,686,-207,-803,188,-520 +-820,226,31,-339,10,121 +-312,-844,624,-516,483,621 +-822,-529,69,-278,800,328 +834,-82,-759,420,811,-264 +-960,-240,-921,561,173,46 +-324,909,-790,-814,-2,-785 +976,334,-290,-891,704,-581 +150,-798,689,-823,237,-639 +-551,-320,876,-502,-622,-628 +-136,845,904,595,-702,-261 +-857,-377,-522,-101,-943,-805 +-682,-787,-888,-459,-752,-985 +-571,-81,623,-133,447,643 +-375,-158,72,-387,-324,-696 +-660,-650,340,188,569,526 +727,-218,16,-7,-595,-988 +-966,-684,802,-783,-272,-194 +115,-566,-888,47,712,180 +-237,-69,45,-272,981,-812 +48,897,439,417,50,325 +348,616,180,254,104,-784 +-730,811,-548,612,-736,790 +138,-810,123,930,65,865 +-768,-299,-49,-895,-692,-418 +487,-531,802,-159,-12,634 +808,-179,552,-73,470,717 +720,-644,886,-141,625,144 +-485,-505,-347,-244,-916,66 +600,-565,995,-5,324,227 +-771,-35,904,-482,753,-303 +-701,65,426,-763,-504,-479 +409,733,-823,475,64,718 +865,975,368,893,-413,-433 +812,-597,-970,819,813,624 +193,-642,-381,-560,545,398 +711,28,-316,771,717,-865 +-509,462,809,-136,786,635 +618,-49,484,169,635,547 +-747,685,-882,-496,-332,82 +-501,-851,870,563,290,570 +-279,-829,-509,397,457,816 +-508,80,850,-188,483,-326 +860,-100,360,119,-205,787 +-870,21,-39,-827,-185,932 +826,284,-136,-866,-330,-97 +-944,-82,745,899,-97,365 +929,262,564,632,-115,632 +244,-276,713,330,-897,-214 +-890,-109,664,876,-974,-907 +716,249,816,489,723,141 +-96,-560,-272,45,-70,645 +762,-503,414,-828,-254,-646 +909,-13,903,-422,-344,-10 +658,-486,743,545,50,674 +-241,507,-367,18,-48,-241 +886,-268,884,-762,120,-486 +-412,-528,879,-647,223,-393 +851,810,234,937,-726,797 +-999,942,839,-134,-996,-189 +100,979,-527,-521,378,800 +544,-844,-832,-530,-77,-641 +43,889,31,442,-934,-503 +-330,-370,-309,-439,173,547 +169,945,62,-753,-542,-597 +208,751,-372,-647,-520,70 +765,-840,907,-257,379,918 +334,-135,-689,730,-427,618 +137,-508,66,-695,78,169 +-962,-123,400,-417,151,969 +328,689,666,427,-555,-642 +-907,343,605,-341,-647,582 +-667,-363,-571,818,-265,-399 +525,-938,904,898,725,692 +-176,-802,-858,-9,780,275 +580,170,-740,287,691,-97 +365,557,-375,361,-288,859 +193,737,842,-808,520,282 +-871,65,-799,836,179,-720 +958,-144,744,-789,797,-48 +122,582,662,912,68,757 +595,241,-801,513,388,186 +-103,-677,-259,-731,-281,-857 +921,319,-696,683,-88,-997 +775,200,78,858,648,768 +316,821,-763,68,-290,-741 +564,664,691,504,760,787 +694,-119,973,-385,309,-760 +777,-947,-57,990,74,19 +971,626,-496,-781,-602,-239 +-651,433,11,-339,939,294 +-965,-728,560,569,-708,-247 diff --git a/problems/p102/src/main.rs b/problems/p102/src/main.rs new file mode 100644 index 0000000..2bbaf8c --- /dev/null +++ b/problems/p102/src/main.rs @@ -0,0 +1,91 @@ +use rayon::prelude::*; +use std::{ + fs::File, + io::{BufRead, BufReader}, +}; + +struct Point { + x: i32, + y: i32, +} + +impl Point { + fn cross_product(&self, b: &Point, c: &Point) -> i32 { + (b.x - self.x) * (c.y - self.y) - (b.y - self.y) * (c.x - self.x) + } +} + +struct Triangle { + a: Point, + b: Point, + c: Point, +} + +fn load_triangle() -> Vec { + let mut tris = Vec::new(); + let file = File::open("./problems/p102/p102_triangles.txt").unwrap(); + let reader = BufReader::new(file); + + let lines: Vec = reader.lines().map(|s| s.unwrap()).collect(); + for line in lines { + // "-340,495,-153,-910,835,-947", + let values: Vec<&str> = line.split(',').collect(); + let values: Vec = values.iter().map(|&x| x.parse::().unwrap()).collect(); + + let triangle = Triangle { + a: Point { + x: values[0], + y: values[1], + }, + b: Point { + x: values[2], + y: values[3], + }, + c: Point { + x: values[4], + y: values[5], + }, + }; + tris.push(triangle); + } + + tris +} + +fn is_include_origin(tri: &Triangle) -> bool { + let a = &tri.a; + let b = &tri.b; + let c = &tri.c; + let origin = Point { x: 0, y: 0 }; + // 对于两个向量 u = (u.x, u.y) 和 v = (v.x, v.y): + // 叉积 = u.x * v.y - u.y * v.x + + let ab_ao = a.cross_product(b, &origin); + let bc_bo = b.cross_product(c, &origin); + let ca_co = c.cross_product(a, &origin); + if ab_ao == 0 || bc_bo == 0 || ca_co == 0 { + return true; + } + matches!( + (ab_ao > 0, bc_bo > 0, ca_co > 0), + (true, true, true) | (false, false, false) + ) +} +#[test] +fn test_is_include_origin() { + let a = Triangle { + a: Point { x: -340, y: 495 }, + b: Point { x: -153, y: -910 }, + c: Point { x: 835, y: -947 }, + }; + assert!(is_include_origin(&a)); +} + +fn main() { + let tris = load_triangle(); + let count = tris + .par_iter() + .filter(|&tri| is_include_origin(tri)) + .count(); + println!("{count}"); +} diff --git a/problems/p103/Cargo.toml b/problems/p103/Cargo.toml new file mode 100644 index 0000000..e7d640a --- /dev/null +++ b/problems/p103/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p103" +version = "0.1.0" +edition = "2024" + +[dependencies] +rayon = "*" diff --git a/problems/p103/src/main.rs b/problems/p103/src/main.rs new file mode 100644 index 0000000..9f9883d --- /dev/null +++ b/problems/p103/src/main.rs @@ -0,0 +1,4 @@ +fn main() { + todo!(); + println!("Hello, world!"); +} diff --git a/problems/p11/Cargo.toml b/problems/p11/Cargo.toml new file mode 100644 index 0000000..f4ade6d --- /dev/null +++ b/problems/p11/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p11" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p11/src/main.rs b/problems/p11/src/main.rs new file mode 100644 index 0000000..5b3148c --- /dev/null +++ b/problems/p11/src/main.rs @@ -0,0 +1,160 @@ +fn main() { + let matrix = [ + [ + 8, 2, 22, 97, 38, 15, 00, 40, 00, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8, + ], + [ + 49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 4, 56, 62, 00, + ], + [ + 81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 3, 49, 13, 36, 65, + ], + [ + 52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91, + ], + [ + 22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80, + ], + [ + 24, 47, 32, 60, 99, 3, 45, 2, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50, + ], + [ + 32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70, + ], + [ + 67, 26, 20, 68, 2, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21, + ], + [ + 24, 55, 58, 5, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72, + ], + [ + 21, 36, 23, 9, 75, 00, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95, + ], + [ + 78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92, + ], + [ + 16, 39, 5, 42, 96, 35, 31, 47, 55, 58, 88, 24, 00, 17, 54, 24, 36, 29, 85, 57, + ], + [ + 86, 56, 00, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58, + ], + [ + 19, 80, 81, 68, 5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 4, 89, 55, 40, + ], + [ + 4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66, + ], + [ + 88, 36, 68, 87, 57, 62, 20, 72, 3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69, + ], + [ + 4, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36, + ], + [ + 20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 4, 36, 16, + ], + [ + 20, 73, 35, 29, 78, 31, 90, 1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 5, 54, + ], + [ + 1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 1, 89, 19, 67, 48, + ], + ]; + + let mut max = 0; + // 横向 + for row in matrix { + for window in row.windows(4) { + let result = window.iter().product(); + if result > max { + max = result; + } + } + } + + // 竖向 + for col in 0..matrix[0].len() { + for start_row in 0..=matrix.len().saturating_sub(4) { + let result: i32 = (start_row..start_row + 4) + .map(|row| matrix[row][col]) + .product(); + if result > max { + max = result; + } + } + } + + // 左上至右下对角线 + for d in 0..(matrix.len() + matrix[0].len() - 1) { + let mut diagonal = Vec::new(); + + // 计算对角线起始点 + let start_row = if d < matrix[0].len() { + 0 + } else { + d - matrix[0].len() + 1 + }; + let start_col = if d < matrix[0].len() { + matrix[0].len() - 1 - d + } else { + 0 + }; + + // 收集对角线元素 + let mut row = start_row; + let mut col = start_col; + while row < matrix.len() && col < matrix[0].len() { + diagonal.push(matrix[row][col]); + row += 1; + col += 1; + } + + // 滑动窗口 + for window in diagonal.windows(4) { + let result: i32 = window.iter().product(); + if result > max { + max = result; + } + } + } + + // 右上至左下对角线 + for d in 0..(matrix.len() + matrix[0].len() - 1) { + let mut diagonal = Vec::new(); + + // 计算对角线起始点 + let start_row = if d < matrix.len() { + d + } else { + matrix.len() - 1 + }; + let start_col = if d < matrix.len() { + 0 + } else { + d - matrix.len() + 1 + }; + + // 收集对角线元素 + let mut row = start_row; + let mut col = start_col; + while row < matrix.len() && col < matrix[0].len() { + diagonal.push(matrix[row][col]); + if row == 0 { + break; + } + row -= 1; + col += 1; + } + + // 滑动窗口 + for window in diagonal.windows(4) { + let result: i32 = window.iter().product(); + if result > max { + max = result; + } + } + } + + println!("max: {max}"); +} diff --git a/problems/p110/Cargo.toml b/problems/p110/Cargo.toml new file mode 100644 index 0000000..c88a91a --- /dev/null +++ b/problems/p110/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p110" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p110/src/main.rs b/problems/p110/src/main.rs new file mode 100644 index 0000000..e81d0ed --- /dev/null +++ b/problems/p110/src/main.rs @@ -0,0 +1,21 @@ +// n, x, y > 0 +// 1 / n = 1 / x + 1 / y +// = (x + y) / (x * y) +// +// n * (x + y) == (x * y) +// +// => (x, y) > n +// => n * (x + y) > 2 * n^2, (x * y) > n^2 +// => (x * y) > 2 * n^2 + +fn get_sol_count(n: u32) -> u32 {} +#[test] +fn test_get_sol_count() { + assert_eq!(get_sol_count(4), 3); + assert_eq!(get_sol_count(1260), 113); +} + +fn main() { + todo!(); + println!("Hello, world!"); +} diff --git a/problems/p112/Cargo.toml b/problems/p112/Cargo.toml new file mode 100644 index 0000000..a7d93bb --- /dev/null +++ b/problems/p112/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p112" +version = "0.1.0" +edition = "2024" + +[dependencies] +rayon = "1.11.0" diff --git a/problems/p112/src/main.rs b/problems/p112/src/main.rs new file mode 100644 index 0000000..285f3ef --- /dev/null +++ b/problems/p112/src/main.rs @@ -0,0 +1,32 @@ +fn is_bou_num(num: u32) -> bool { + if num < 100 { + return false; + } + let str_num = num.to_string().chars().collect::>(); + let prev_con = str_num[0] >= str_num[1]; + for window in str_num.windows(2).skip(1) { + let a = window[0]; + let b = window[1]; + if prev_con != (a >= b) { + return true; + } + } + false +} +#[test] +fn test() { + assert!(is_bou_num(155349)); + assert!(!is_bou_num(123456)); +} + +fn main() { + let mut counter = 0; + for i in 0..=21780 { + if is_bou_num(i) { + counter += 1; + } + } + todo!(); + let percentage = counter as f64 / 21780f64; + println!("{percentage}") +} diff --git a/problems/p12/Cargo.toml b/problems/p12/Cargo.toml new file mode 100644 index 0000000..eb7d2e7 --- /dev/null +++ b/problems/p12/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p12" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p12/src/main.rs b/problems/p12/src/main.rs new file mode 100644 index 0000000..228ddd5 --- /dev/null +++ b/problems/p12/src/main.rs @@ -0,0 +1,42 @@ +struct TriNum { + current: usize, + sum: usize, +} + +impl TriNum { + fn new() -> Self { + Self { current: 0, sum: 0 } + } +} + +impl Iterator for TriNum { + type Item = usize; + + fn next(&mut self) -> Option { + self.current += 1; + self.sum += self.current; + Some(self.sum) + } +} + +fn factor_count(input: usize) -> usize { + let max = (input as f32).sqrt() as usize; + let mut count = 0; + for i in 1..=max { + if input % i == 0 { + count += 2; + } + } + count +} + +fn main() { + let tri_num = TriNum::new(); + for i in tri_num { + let count = factor_count(i); + if count > 500 { + println!("i: {i}"); + break; + } + } +} diff --git a/problems/p125/Cargo.toml b/problems/p125/Cargo.toml new file mode 100644 index 0000000..1c26608 --- /dev/null +++ b/problems/p125/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p125" +version = "0.1.0" +edition = "2024" + +[dependencies] +rayon = "1.10.0" diff --git a/problems/p125/src/main.rs b/problems/p125/src/main.rs new file mode 100644 index 0000000..70c43b2 --- /dev/null +++ b/problems/p125/src/main.rs @@ -0,0 +1,57 @@ +use rayon::prelude::*; + +fn is_palindromic_number(n: u64) -> bool { + let str_n = n.to_string(); + let rev_str_n: String = str_n.chars().rev().collect(); + if str_n == rev_str_n { + return true; + } + false +} + +fn is_continue_square_sum(n: u64) -> bool { + for start in 1..=(n as f64).sqrt() as u64 { + let mut sum = 0; + let mut count = 0; + let mut k = start; + + while sum < n { + sum += k * k; + count += 1; + k += 1; + + if sum == n && count >= 2 { + // 至少2个连续数字 + return true; + } + } + } + false +} + +fn main() { + assert!(is_palindromic_number(595)); + assert!(is_continue_square_sum(595)); + // let mut sum = 0u64; + // for i in 2..100000000u64 { + // if !is_palindromic_number(i) { + // continue; + // } + // if !is_continue_square_sum(i) { + // continue; + // } + // sum += i; + // } + // let sum: u64 = (2..100000000u64) + // .filter(|&i| is_palindromic_number(i)) + // .filter(|&i| is_continue_square_sum(i)) + // .sum(); + + let sum: u64 = (2..100000000u64) + .into_par_iter() + .filter(|&i| is_palindromic_number(i)) + .filter(|&i| is_continue_square_sum(i)) + .sum(); + + println!("{sum}"); +} diff --git a/problems/p13/Cargo.toml b/problems/p13/Cargo.toml new file mode 100644 index 0000000..1e6c846 --- /dev/null +++ b/problems/p13/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "p13" +version = "0.1.0" +edition = "2024" + +[dependencies] +num-bigint = "0.4.6" +anyhow = "1.0.98" diff --git a/problems/p13/input.txt b/problems/p13/input.txt new file mode 100644 index 0000000..43b568e --- /dev/null +++ b/problems/p13/input.txt @@ -0,0 +1,100 @@ +37107287533902102798797998220837590246510135740250 +46376937677490009712648124896970078050417018260538 +74324986199524741059474233309513058123726617309629 +91942213363574161572522430563301811072406154908250 +23067588207539346171171980310421047513778063246676 +89261670696623633820136378418383684178734361726757 +28112879812849979408065481931592621691275889832738 +44274228917432520321923589422876796487670272189318 +47451445736001306439091167216856844588711603153276 +70386486105843025439939619828917593665686757934951 +62176457141856560629502157223196586755079324193331 +64906352462741904929101432445813822663347944758178 +92575867718337217661963751590579239728245598838407 +58203565325359399008402633568948830189458628227828 +80181199384826282014278194139940567587151170094390 +35398664372827112653829987240784473053190104293586 +86515506006295864861532075273371959191420517255829 +71693888707715466499115593487603532921714970056938 +54370070576826684624621495650076471787294438377604 +53282654108756828443191190634694037855217779295145 +36123272525000296071075082563815656710885258350721 +45876576172410976447339110607218265236877223636045 +17423706905851860660448207621209813287860733969412 +81142660418086830619328460811191061556940512689692 +51934325451728388641918047049293215058642563049483 +62467221648435076201727918039944693004732956340691 +15732444386908125794514089057706229429197107928209 +55037687525678773091862540744969844508330393682126 +18336384825330154686196124348767681297534375946515 +80386287592878490201521685554828717201219257766954 +78182833757993103614740356856449095527097864797581 +16726320100436897842553539920931837441497806860984 +48403098129077791799088218795327364475675590848030 +87086987551392711854517078544161852424320693150332 +59959406895756536782107074926966537676326235447210 +69793950679652694742597709739166693763042633987085 +41052684708299085211399427365734116182760315001271 +65378607361501080857009149939512557028198746004375 +35829035317434717326932123578154982629742552737307 +94953759765105305946966067683156574377167401875275 +88902802571733229619176668713819931811048770190271 +25267680276078003013678680992525463401061632866526 +36270218540497705585629946580636237993140746255962 +24074486908231174977792365466257246923322810917141 +91430288197103288597806669760892938638285025333403 +34413065578016127815921815005561868836468420090470 +23053081172816430487623791969842487255036638784583 +11487696932154902810424020138335124462181441773470 +63783299490636259666498587618221225225512486764533 +67720186971698544312419572409913959008952310058822 +95548255300263520781532296796249481641953868218774 +76085327132285723110424803456124867697064507995236 +37774242535411291684276865538926205024910326572967 +23701913275725675285653248258265463092207058596522 +29798860272258331913126375147341994889534765745501 +18495701454879288984856827726077713721403798879715 +38298203783031473527721580348144513491373226651381 +34829543829199918180278916522431027392251122869539 +40957953066405232632538044100059654939159879593635 +29746152185502371307642255121183693803580388584903 +41698116222072977186158236678424689157993532961922 +62467957194401269043877107275048102390895523597457 +23189706772547915061505504953922979530901129967519 +86188088225875314529584099251203829009407770775672 +11306739708304724483816533873502340845647058077308 +82959174767140363198008187129011875491310547126581 +97623331044818386269515456334926366572897563400500 +42846280183517070527831839425882145521227251250327 +55121603546981200581762165212827652751691296897789 +32238195734329339946437501907836945765883352399886 +75506164965184775180738168837861091527357929701337 +62177842752192623401942399639168044983993173312731 +32924185707147349566916674687634660915035914677504 +99518671430235219628894890102423325116913619626622 +73267460800591547471830798392868535206946944540724 +76841822524674417161514036427982273348055556214818 +97142617910342598647204516893989422179826088076852 +87783646182799346313767754307809363333018982642090 +10848802521674670883215120185883543223812876952786 +71329612474782464538636993009049310363619763878039 +62184073572399794223406235393808339651327408011116 +66627891981488087797941876876144230030984490851411 +60661826293682836764744779239180335110989069790714 +85786944089552990653640447425576083659976645795096 +66024396409905389607120198219976047599490197230297 +64913982680032973156037120041377903785566085089252 +16730939319872750275468906903707539413042652315011 +94809377245048795150954100921645863754710598436791 +78639167021187492431995700641917969777599028300699 +15368713711936614952811305876380278410754449733078 +40789923115535562561142322423255033685442488917353 +44889911501440648020369068063960672322193204149535 +41503128880339536053299340368006977710650566631954 +81234880673210146739058568557934581403627822703280 +82616570773948327592232845941706525094512325230608 +22918802058777319719839450180888072429661980811197 +77158542502016545090413245809786882778948721859617 +72107838435069186155435662884062257473692284509516 +20849603980134001723930671666823555245252804609722 +53503534226472524250874054075591789781264330331690 diff --git a/problems/p13/src/main.rs b/problems/p13/src/main.rs new file mode 100644 index 0000000..38d8125 --- /dev/null +++ b/problems/p13/src/main.rs @@ -0,0 +1,25 @@ +use std::{ + fs::File, + io::{BufRead, BufReader}, + str::FromStr, +}; + +use anyhow::Result; +use num_bigint::BigUint; + +fn main() -> Result<()> { + let file = File::open("p13/input.txt")?; + let reader = BufReader::new(file); + let mut numbers: Vec = Vec::new(); + for line in reader.lines() { + let line = line?; + let trimmed = line.trim(); + if !trimmed.is_empty() { + let big_num = BigUint::from_str(trimmed).unwrap(); + numbers.push(big_num); + } + } + let result: BigUint = numbers.iter().sum(); + println!("{result}"); + Ok(()) +} diff --git a/problems/p14/Cargo.toml b/problems/p14/Cargo.toml new file mode 100644 index 0000000..69ec413 --- /dev/null +++ b/problems/p14/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p14" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p14/src/main.rs b/problems/p14/src/main.rs new file mode 100644 index 0000000..571c6f6 --- /dev/null +++ b/problems/p14/src/main.rs @@ -0,0 +1,28 @@ +use std::collections::HashMap; + +fn gen_seq(n: u64) -> u64 { + if n & 1 == 0 { n >> 1 } else { 3 * n + 1 } +} + +fn main() { + let mut result = HashMap::new(); + for i in 1..1000000 { + let mut seq = gen_seq(i); + let mut counter: u32 = 1; + while seq != 1 { + seq = gen_seq(seq); + counter += 1; + } + counter += 1; + result.insert(i, counter); + } + let mut biggest_seq = 0; + let mut biggest_seq_index = 0; + for (k, v) in result { + if v > biggest_seq { + biggest_seq = v; + biggest_seq_index = k; + } + } + println!("{biggest_seq_index}") +} diff --git a/problems/p15/Cargo.toml b/problems/p15/Cargo.toml new file mode 100644 index 0000000..7835d91 --- /dev/null +++ b/problems/p15/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p15" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p15/src/main.rs b/problems/p15/src/main.rs new file mode 100644 index 0000000..bb279c5 --- /dev/null +++ b/problems/p15/src/main.rs @@ -0,0 +1,14 @@ +fn path(n: u16) { + let mut map: Vec> = vec![vec![1; n as usize]; n as usize]; + + for i in 1..n as usize { + for j in 1..n as usize { + map[i][j] = map[i - 1][j] + map[i][j - 1]; + } + } + println!("{}", map[(n - 1) as usize][(n - 1) as usize]); +} + +fn main() { + path(21); +} diff --git a/problems/p16/Cargo.toml b/problems/p16/Cargo.toml new file mode 100644 index 0000000..ac41895 --- /dev/null +++ b/problems/p16/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p16" +version = "0.1.0" +edition = "2024" + +[dependencies] +num-bigint = "0.4.6" diff --git a/problems/p16/src/main.rs b/problems/p16/src/main.rs new file mode 100644 index 0000000..84d0357 --- /dev/null +++ b/problems/p16/src/main.rs @@ -0,0 +1,15 @@ +use num_bigint::BigUint; + +fn main() { + let two = BigUint::from(2u8); + let zero = BigUint::from(0u8); + let ten = BigUint::from(10u8); + let mut power_two = two.pow(1000); + let mut sum = zero.clone(); + while power_two != zero { + sum += &power_two % &ten; + power_two /= &ten; + } + + println!("{sum}"); +} diff --git a/problems/p167/Cargo.toml b/problems/p167/Cargo.toml new file mode 100644 index 0000000..9863009 --- /dev/null +++ b/problems/p167/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p167" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p167/src/main.rs b/problems/p167/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/problems/p167/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/problems/p17/Cargo.toml b/problems/p17/Cargo.toml new file mode 100644 index 0000000..9cdc1d0 --- /dev/null +++ b/problems/p17/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p17" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p17/src/main.rs b/problems/p17/src/main.rs new file mode 100644 index 0000000..049435d --- /dev/null +++ b/problems/p17/src/main.rs @@ -0,0 +1,104 @@ +fn number_to_letters(n: u32) -> String { + if n == 0 { + return "zero".to_string(); + } + + let ones = [ + "", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", + ]; + let teens = [ + "ten", + "eleven", + "twelve", + "thirteen", + "fourteen", + "fifteen", + "sixteen", + "seventeen", + "eighteen", + "nineteen", + ]; + let tens = [ + "", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety", + ]; + + let mut result = String::new(); + let mut num = n; + + // 处理千位 + if num >= 1000 { + let thousands = num / 1000; + result.push_str(&number_to_letters_under_1000( + thousands, &ones, &teens, &tens, + )); + result.push_str("thousand"); + num %= 1000; + if num > 0 { + result.push_str("and"); + } + } + + // 处理百位以下 + if num > 0 { + result.push_str(&number_to_letters_under_1000(num, &ones, &teens, &tens)); + } + + result +} + +fn number_to_letters_under_1000(n: u32, ones: &[&str], teens: &[&str], tens: &[&str]) -> String { + let mut result = String::new(); + let mut num = n; + + // 处理百位 + if num >= 100 { + let hundreds = num / 100; + result.push_str(ones[hundreds as usize]); + result.push_str("hundred"); + num %= 100; + if num > 0 { + result.push_str("and"); + } + } + + // 处理十位和个位 + if num >= 20 { + let ten_digit = num / 10; + result.push_str(tens[ten_digit as usize]); + num %= 10; + if num > 0 { + result.push_str(ones[num as usize]); + } + } else if num >= 10 { + result.push_str(teens[(num - 10) as usize]); + } else if num > 0 { + result.push_str(ones[num as usize]); + } + + result +} + +fn count_letters(text: &str) -> usize { + text.chars().filter(|c| c.is_alphabetic()).count() +} + +fn solve_letter_count(start: u32, end: u32) -> usize { + (start..=end) + .map(|n| count_letters(&number_to_letters(n))) + .sum() +} + +fn main() { + // 验证 1-5 的例子 + let test_words = ["one", "two", "three", "four", "five"]; + let test_count: usize = test_words.iter().map(|w| w.len()).sum(); + println!("1到5的字母数: {test_count}"); + + // 验证我们的函数 + let our_count = solve_letter_count(1, 5); + println!("我们函数计算的1到5: {our_count}"); + + // 计算 1 到 1000 + let result = solve_letter_count(1, 1000); + println!("1到1000的字母总数: {result}"); +} diff --git a/problems/p18/Cargo.toml b/problems/p18/Cargo.toml new file mode 100644 index 0000000..7506402 --- /dev/null +++ b/problems/p18/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p18" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p18/src/main.rs b/problems/p18/src/main.rs new file mode 100644 index 0000000..e896eca --- /dev/null +++ b/problems/p18/src/main.rs @@ -0,0 +1,34 @@ +fn max_path_sum(triangle: Vec>) -> i32 { + let n = triangle.len(); + let mut dp = triangle.clone(); + + // 从倒数第二行开始,自底向上计算 + for i in (0..n - 1).rev() { + for j in 0..triangle[i].len() { + dp[i][j] += dp[i + 1][j].max(dp[i + 1][j + 1]); + } + } + + dp[0][0] +} +fn main() { + let numbers: Vec> = vec![ + vec![75], + vec![95, 64], + vec![17, 47, 82], + vec![18, 35, 87, 10], + vec![20, 4, 82, 47, 65], + vec![19, 1, 23, 75, 3, 34], + vec![88, 2, 77, 73, 7, 63, 67], + vec![99, 65, 4, 28, 6, 16, 70, 92], + vec![41, 41, 26, 56, 83, 40, 80, 70, 33], + vec![41, 48, 72, 33, 47, 32, 37, 16, 94, 29], + vec![53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14], + vec![70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57], + vec![91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48], + vec![63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31], + vec![4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23], + ]; + let result = max_path_sum(numbers); + println!("最大路径和: {result}"); +} diff --git a/problems/p19/Cargo.toml b/problems/p19/Cargo.toml new file mode 100644 index 0000000..144fe5d --- /dev/null +++ b/problems/p19/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p19" +version = "0.1.0" +edition = "2024" + +[dependencies] +chrono = "0.4.41" diff --git a/problems/p19/src/main.rs b/problems/p19/src/main.rs new file mode 100644 index 0000000..daea8ea --- /dev/null +++ b/problems/p19/src/main.rs @@ -0,0 +1,19 @@ +use chrono::{Datelike, NaiveDate, Weekday}; + +fn main() { + let mut sum = 0; + for year in 1901..=2000 { + for month in 1..=12 { + let date = NaiveDate::from_ymd_opt(year, month, 1).unwrap(); + + // 获取星期几 + let weekday = date.weekday(); + + // 判断是否为特定星期 + if weekday == Weekday::Sun { + sum += 1; + } + } + } + println!("{sum}") +} diff --git a/problems/p2/Cargo.toml b/problems/p2/Cargo.toml new file mode 100644 index 0000000..d94d5c8 --- /dev/null +++ b/problems/p2/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p2" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p2/src/main.rs b/problems/p2/src/main.rs new file mode 100644 index 0000000..6be6411 --- /dev/null +++ b/problems/p2/src/main.rs @@ -0,0 +1,48 @@ +struct Fib { + current: u32, + next: u32, +} + +impl Fib { + fn new() -> Fib { + Fib { + current: 1, + next: 2, + } + } +} + +impl Iterator for Fib { + type Item = u32; + fn next(&mut self) -> Option { + let current = self.current; + self.current = self.next; + self.next += current; + Some(current) + } +} + +fn fib_sum() -> u32 { + let mut sum: u32 = 0; + let mut fib = Fib::new(); + + let mut number = fib.next().unwrap(); + while number < 4000000 { + if number % 2 == 0 { + sum += number; + } + + number = fib.next().unwrap(); + } + + sum +} + +fn main() { + let mut fib = Fib::new(); + + for _ in 0..10 { + print!("{} ", fib.next().unwrap()); + } + println!("{}", fib_sum()); +} diff --git a/problems/p20/Cargo.toml b/problems/p20/Cargo.toml new file mode 100644 index 0000000..46eaa89 --- /dev/null +++ b/problems/p20/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p20" +version = "0.1.0" +edition = "2024" + +[dependencies] +num-bigint = "0.4.6" diff --git a/problems/p20/src/main.rs b/problems/p20/src/main.rs new file mode 100644 index 0000000..994a712 --- /dev/null +++ b/problems/p20/src/main.rs @@ -0,0 +1,17 @@ +use num_bigint::BigUint; + +fn main() { + let mut fact = BigUint::from(1u32); + for i in 1..=100 { + fact *= BigUint::from(i as u32); + } + let mut sum = BigUint::from(0u32); + let ten = BigUint::from(10u32); + let zero = BigUint::from(0u32); + while fact != zero { + sum += &fact % &ten; + fact /= &ten; + } + + println!("{sum}"); +} diff --git a/problems/p21/Cargo.toml b/problems/p21/Cargo.toml new file mode 100644 index 0000000..934f19b --- /dev/null +++ b/problems/p21/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p21" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p21/src/main.rs b/problems/p21/src/main.rs new file mode 100644 index 0000000..4a6b7bc --- /dev/null +++ b/problems/p21/src/main.rs @@ -0,0 +1,33 @@ +fn d(n: u64) -> u64 { + let mut sum = 1u64; + let sqrt_n = (n as f64).sqrt() as u64; + + for i in 2..=sqrt_n { + if n % i == 0 { + sum += i; + if i != n / i { + // 避免完全平方数重复计算 + sum += n / i; + } + } + } + sum +} + +fn main() { + let mut amicables: Vec = Vec::new(); + for i in 2..=10000 { + if amicables.contains(&i) { + continue; + } + let pair = d(i); + if d(pair) == i && pair != i { + // 排除完美数 + amicables.push(i); + amicables.push(pair); + } + } + let sum: u64 = amicables.iter().sum(); + println!("{sum}"); +} + diff --git a/problems/p22/Cargo.toml b/problems/p22/Cargo.toml new file mode 100644 index 0000000..bd57598 --- /dev/null +++ b/problems/p22/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p22" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p22/p022_names.txt b/problems/p22/p022_names.txt new file mode 100644 index 0000000..7b8986b --- /dev/null +++ b/problems/p22/p022_names.txt @@ -0,0 +1 @@ +"MARY","PATRICIA","LINDA","BARBARA","ELIZABETH","JENNIFER","MARIA","SUSAN","MARGARET","DOROTHY","LISA","NANCY","KAREN","BETTY","HELEN","SANDRA","DONNA","CAROL","RUTH","SHARON","MICHELLE","LAURA","SARAH","KIMBERLY","DEBORAH","JESSICA","SHIRLEY","CYNTHIA","ANGELA","MELISSA","BRENDA","AMY","ANNA","REBECCA","VIRGINIA","KATHLEEN","PAMELA","MARTHA","DEBRA","AMANDA","STEPHANIE","CAROLYN","CHRISTINE","MARIE","JANET","CATHERINE","FRANCES","ANN","JOYCE","DIANE","ALICE","JULIE","HEATHER","TERESA","DORIS","GLORIA","EVELYN","JEAN","CHERYL","MILDRED","KATHERINE","JOAN","ASHLEY","JUDITH","ROSE","JANICE","KELLY","NICOLE","JUDY","CHRISTINA","KATHY","THERESA","BEVERLY","DENISE","TAMMY","IRENE","JANE","LORI","RACHEL","MARILYN","ANDREA","KATHRYN","LOUISE","SARA","ANNE","JACQUELINE","WANDA","BONNIE","JULIA","RUBY","LOIS","TINA","PHYLLIS","NORMA","PAULA","DIANA","ANNIE","LILLIAN","EMILY","ROBIN","PEGGY","CRYSTAL","GLADYS","RITA","DAWN","CONNIE","FLORENCE","TRACY","EDNA","TIFFANY","CARMEN","ROSA","CINDY","GRACE","WENDY","VICTORIA","EDITH","KIM","SHERRY","SYLVIA","JOSEPHINE","THELMA","SHANNON","SHEILA","ETHEL","ELLEN","ELAINE","MARJORIE","CARRIE","CHARLOTTE","MONICA","ESTHER","PAULINE","EMMA","JUANITA","ANITA","RHONDA","HAZEL","AMBER","EVA","DEBBIE","APRIL","LESLIE","CLARA","LUCILLE","JAMIE","JOANNE","ELEANOR","VALERIE","DANIELLE","MEGAN","ALICIA","SUZANNE","MICHELE","GAIL","BERTHA","DARLENE","VERONICA","JILL","ERIN","GERALDINE","LAUREN","CATHY","JOANN","LORRAINE","LYNN","SALLY","REGINA","ERICA","BEATRICE","DOLORES","BERNICE","AUDREY","YVONNE","ANNETTE","JUNE","SAMANTHA","MARION","DANA","STACY","ANA","RENEE","IDA","VIVIAN","ROBERTA","HOLLY","BRITTANY","MELANIE","LORETTA","YOLANDA","JEANETTE","LAURIE","KATIE","KRISTEN","VANESSA","ALMA","SUE","ELSIE","BETH","JEANNE","VICKI","CARLA","TARA","ROSEMARY","EILEEN","TERRI","GERTRUDE","LUCY","TONYA","ELLA","STACEY","WILMA","GINA","KRISTIN","JESSIE","NATALIE","AGNES","VERA","WILLIE","CHARLENE","BESSIE","DELORES","MELINDA","PEARL","ARLENE","MAUREEN","COLLEEN","ALLISON","TAMARA","JOY","GEORGIA","CONSTANCE","LILLIE","CLAUDIA","JACKIE","MARCIA","TANYA","NELLIE","MINNIE","MARLENE","HEIDI","GLENDA","LYDIA","VIOLA","COURTNEY","MARIAN","STELLA","CAROLINE","DORA","JO","VICKIE","MATTIE","TERRY","MAXINE","IRMA","MABEL","MARSHA","MYRTLE","LENA","CHRISTY","DEANNA","PATSY","HILDA","GWENDOLYN","JENNIE","NORA","MARGIE","NINA","CASSANDRA","LEAH","PENNY","KAY","PRISCILLA","NAOMI","CAROLE","BRANDY","OLGA","BILLIE","DIANNE","TRACEY","LEONA","JENNY","FELICIA","SONIA","MIRIAM","VELMA","BECKY","BOBBIE","VIOLET","KRISTINA","TONI","MISTY","MAE","SHELLY","DAISY","RAMONA","SHERRI","ERIKA","KATRINA","CLAIRE","LINDSEY","LINDSAY","GENEVA","GUADALUPE","BELINDA","MARGARITA","SHERYL","CORA","FAYE","ADA","NATASHA","SABRINA","ISABEL","MARGUERITE","HATTIE","HARRIET","MOLLY","CECILIA","KRISTI","BRANDI","BLANCHE","SANDY","ROSIE","JOANNA","IRIS","EUNICE","ANGIE","INEZ","LYNDA","MADELINE","AMELIA","ALBERTA","GENEVIEVE","MONIQUE","JODI","JANIE","MAGGIE","KAYLA","SONYA","JAN","LEE","KRISTINE","CANDACE","FANNIE","MARYANN","OPAL","ALISON","YVETTE","MELODY","LUZ","SUSIE","OLIVIA","FLORA","SHELLEY","KRISTY","MAMIE","LULA","LOLA","VERNA","BEULAH","ANTOINETTE","CANDICE","JUANA","JEANNETTE","PAM","KELLI","HANNAH","WHITNEY","BRIDGET","KARLA","CELIA","LATOYA","PATTY","SHELIA","GAYLE","DELLA","VICKY","LYNNE","SHERI","MARIANNE","KARA","JACQUELYN","ERMA","BLANCA","MYRA","LETICIA","PAT","KRISTA","ROXANNE","ANGELICA","JOHNNIE","ROBYN","FRANCIS","ADRIENNE","ROSALIE","ALEXANDRA","BROOKE","BETHANY","SADIE","BERNADETTE","TRACI","JODY","KENDRA","JASMINE","NICHOLE","RACHAEL","CHELSEA","MABLE","ERNESTINE","MURIEL","MARCELLA","ELENA","KRYSTAL","ANGELINA","NADINE","KARI","ESTELLE","DIANNA","PAULETTE","LORA","MONA","DOREEN","ROSEMARIE","ANGEL","DESIREE","ANTONIA","HOPE","GINGER","JANIS","BETSY","CHRISTIE","FREDA","MERCEDES","MEREDITH","LYNETTE","TERI","CRISTINA","EULA","LEIGH","MEGHAN","SOPHIA","ELOISE","ROCHELLE","GRETCHEN","CECELIA","RAQUEL","HENRIETTA","ALYSSA","JANA","KELLEY","GWEN","KERRY","JENNA","TRICIA","LAVERNE","OLIVE","ALEXIS","TASHA","SILVIA","ELVIRA","CASEY","DELIA","SOPHIE","KATE","PATTI","LORENA","KELLIE","SONJA","LILA","LANA","DARLA","MAY","MINDY","ESSIE","MANDY","LORENE","ELSA","JOSEFINA","JEANNIE","MIRANDA","DIXIE","LUCIA","MARTA","FAITH","LELA","JOHANNA","SHARI","CAMILLE","TAMI","SHAWNA","ELISA","EBONY","MELBA","ORA","NETTIE","TABITHA","OLLIE","JAIME","WINIFRED","KRISTIE","MARINA","ALISHA","AIMEE","RENA","MYRNA","MARLA","TAMMIE","LATASHA","BONITA","PATRICE","RONDA","SHERRIE","ADDIE","FRANCINE","DELORIS","STACIE","ADRIANA","CHERI","SHELBY","ABIGAIL","CELESTE","JEWEL","CARA","ADELE","REBEKAH","LUCINDA","DORTHY","CHRIS","EFFIE","TRINA","REBA","SHAWN","SALLIE","AURORA","LENORA","ETTA","LOTTIE","KERRI","TRISHA","NIKKI","ESTELLA","FRANCISCA","JOSIE","TRACIE","MARISSA","KARIN","BRITTNEY","JANELLE","LOURDES","LAUREL","HELENE","FERN","ELVA","CORINNE","KELSEY","INA","BETTIE","ELISABETH","AIDA","CAITLIN","INGRID","IVA","EUGENIA","CHRISTA","GOLDIE","CASSIE","MAUDE","JENIFER","THERESE","FRANKIE","DENA","LORNA","JANETTE","LATONYA","CANDY","MORGAN","CONSUELO","TAMIKA","ROSETTA","DEBORA","CHERIE","POLLY","DINA","JEWELL","FAY","JILLIAN","DOROTHEA","NELL","TRUDY","ESPERANZA","PATRICA","KIMBERLEY","SHANNA","HELENA","CAROLINA","CLEO","STEFANIE","ROSARIO","OLA","JANINE","MOLLIE","LUPE","ALISA","LOU","MARIBEL","SUSANNE","BETTE","SUSANA","ELISE","CECILE","ISABELLE","LESLEY","JOCELYN","PAIGE","JONI","RACHELLE","LEOLA","DAPHNE","ALTA","ESTER","PETRA","GRACIELA","IMOGENE","JOLENE","KEISHA","LACEY","GLENNA","GABRIELA","KERI","URSULA","LIZZIE","KIRSTEN","SHANA","ADELINE","MAYRA","JAYNE","JACLYN","GRACIE","SONDRA","CARMELA","MARISA","ROSALIND","CHARITY","TONIA","BEATRIZ","MARISOL","CLARICE","JEANINE","SHEENA","ANGELINE","FRIEDA","LILY","ROBBIE","SHAUNA","MILLIE","CLAUDETTE","CATHLEEN","ANGELIA","GABRIELLE","AUTUMN","KATHARINE","SUMMER","JODIE","STACI","LEA","CHRISTI","JIMMIE","JUSTINE","ELMA","LUELLA","MARGRET","DOMINIQUE","SOCORRO","RENE","MARTINA","MARGO","MAVIS","CALLIE","BOBBI","MARITZA","LUCILE","LEANNE","JEANNINE","DEANA","AILEEN","LORIE","LADONNA","WILLA","MANUELA","GALE","SELMA","DOLLY","SYBIL","ABBY","LARA","DALE","IVY","DEE","WINNIE","MARCY","LUISA","JERI","MAGDALENA","OFELIA","MEAGAN","AUDRA","MATILDA","LEILA","CORNELIA","BIANCA","SIMONE","BETTYE","RANDI","VIRGIE","LATISHA","BARBRA","GEORGINA","ELIZA","LEANN","BRIDGETTE","RHODA","HALEY","ADELA","NOLA","BERNADINE","FLOSSIE","ILA","GRETA","RUTHIE","NELDA","MINERVA","LILLY","TERRIE","LETHA","HILARY","ESTELA","VALARIE","BRIANNA","ROSALYN","EARLINE","CATALINA","AVA","MIA","CLARISSA","LIDIA","CORRINE","ALEXANDRIA","CONCEPCION","TIA","SHARRON","RAE","DONA","ERICKA","JAMI","ELNORA","CHANDRA","LENORE","NEVA","MARYLOU","MELISA","TABATHA","SERENA","AVIS","ALLIE","SOFIA","JEANIE","ODESSA","NANNIE","HARRIETT","LORAINE","PENELOPE","MILAGROS","EMILIA","BENITA","ALLYSON","ASHLEE","TANIA","TOMMIE","ESMERALDA","KARINA","EVE","PEARLIE","ZELMA","MALINDA","NOREEN","TAMEKA","SAUNDRA","HILLARY","AMIE","ALTHEA","ROSALINDA","JORDAN","LILIA","ALANA","GAY","CLARE","ALEJANDRA","ELINOR","MICHAEL","LORRIE","JERRI","DARCY","EARNESTINE","CARMELLA","TAYLOR","NOEMI","MARCIE","LIZA","ANNABELLE","LOUISA","EARLENE","MALLORY","CARLENE","NITA","SELENA","TANISHA","KATY","JULIANNE","JOHN","LAKISHA","EDWINA","MARICELA","MARGERY","KENYA","DOLLIE","ROXIE","ROSLYN","KATHRINE","NANETTE","CHARMAINE","LAVONNE","ILENE","KRIS","TAMMI","SUZETTE","CORINE","KAYE","JERRY","MERLE","CHRYSTAL","LINA","DEANNE","LILIAN","JULIANA","ALINE","LUANN","KASEY","MARYANNE","EVANGELINE","COLETTE","MELVA","LAWANDA","YESENIA","NADIA","MADGE","KATHIE","EDDIE","OPHELIA","VALERIA","NONA","MITZI","MARI","GEORGETTE","CLAUDINE","FRAN","ALISSA","ROSEANN","LAKEISHA","SUSANNA","REVA","DEIDRE","CHASITY","SHEREE","CARLY","JAMES","ELVIA","ALYCE","DEIRDRE","GENA","BRIANA","ARACELI","KATELYN","ROSANNE","WENDI","TESSA","BERTA","MARVA","IMELDA","MARIETTA","MARCI","LEONOR","ARLINE","SASHA","MADELYN","JANNA","JULIETTE","DEENA","AURELIA","JOSEFA","AUGUSTA","LILIANA","YOUNG","CHRISTIAN","LESSIE","AMALIA","SAVANNAH","ANASTASIA","VILMA","NATALIA","ROSELLA","LYNNETTE","CORINA","ALFREDA","LEANNA","CAREY","AMPARO","COLEEN","TAMRA","AISHA","WILDA","KARYN","CHERRY","QUEEN","MAURA","MAI","EVANGELINA","ROSANNA","HALLIE","ERNA","ENID","MARIANA","LACY","JULIET","JACKLYN","FREIDA","MADELEINE","MARA","HESTER","CATHRYN","LELIA","CASANDRA","BRIDGETT","ANGELITA","JANNIE","DIONNE","ANNMARIE","KATINA","BERYL","PHOEBE","MILLICENT","KATHERYN","DIANN","CARISSA","MARYELLEN","LIZ","LAURI","HELGA","GILDA","ADRIAN","RHEA","MARQUITA","HOLLIE","TISHA","TAMERA","ANGELIQUE","FRANCESCA","BRITNEY","KAITLIN","LOLITA","FLORINE","ROWENA","REYNA","TWILA","FANNY","JANELL","INES","CONCETTA","BERTIE","ALBA","BRIGITTE","ALYSON","VONDA","PANSY","ELBA","NOELLE","LETITIA","KITTY","DEANN","BRANDIE","LOUELLA","LETA","FELECIA","SHARLENE","LESA","BEVERLEY","ROBERT","ISABELLA","HERMINIA","TERRA","CELINA","TORI","OCTAVIA","JADE","DENICE","GERMAINE","SIERRA","MICHELL","CORTNEY","NELLY","DORETHA","SYDNEY","DEIDRA","MONIKA","LASHONDA","JUDI","CHELSEY","ANTIONETTE","MARGOT","BOBBY","ADELAIDE","NAN","LEEANN","ELISHA","DESSIE","LIBBY","KATHI","GAYLA","LATANYA","MINA","MELLISA","KIMBERLEE","JASMIN","RENAE","ZELDA","ELDA","MA","JUSTINA","GUSSIE","EMILIE","CAMILLA","ABBIE","ROCIO","KAITLYN","JESSE","EDYTHE","ASHLEIGH","SELINA","LAKESHA","GERI","ALLENE","PAMALA","MICHAELA","DAYNA","CARYN","ROSALIA","SUN","JACQULINE","REBECA","MARYBETH","KRYSTLE","IOLA","DOTTIE","BENNIE","BELLE","AUBREY","GRISELDA","ERNESTINA","ELIDA","ADRIANNE","DEMETRIA","DELMA","CHONG","JAQUELINE","DESTINY","ARLEEN","VIRGINA","RETHA","FATIMA","TILLIE","ELEANORE","CARI","TREVA","BIRDIE","WILHELMINA","ROSALEE","MAURINE","LATRICE","YONG","JENA","TARYN","ELIA","DEBBY","MAUDIE","JEANNA","DELILAH","CATRINA","SHONDA","HORTENCIA","THEODORA","TERESITA","ROBBIN","DANETTE","MARYJANE","FREDDIE","DELPHINE","BRIANNE","NILDA","DANNA","CINDI","BESS","IONA","HANNA","ARIEL","WINONA","VIDA","ROSITA","MARIANNA","WILLIAM","RACHEAL","GUILLERMINA","ELOISA","CELESTINE","CAREN","MALISSA","LONA","CHANTEL","SHELLIE","MARISELA","LEORA","AGATHA","SOLEDAD","MIGDALIA","IVETTE","CHRISTEN","ATHENA","JANEL","CHLOE","VEDA","PATTIE","TESSIE","TERA","MARILYNN","LUCRETIA","KARRIE","DINAH","DANIELA","ALECIA","ADELINA","VERNICE","SHIELA","PORTIA","MERRY","LASHAWN","DEVON","DARA","TAWANA","OMA","VERDA","CHRISTIN","ALENE","ZELLA","SANDI","RAFAELA","MAYA","KIRA","CANDIDA","ALVINA","SUZAN","SHAYLA","LYN","LETTIE","ALVA","SAMATHA","ORALIA","MATILDE","MADONNA","LARISSA","VESTA","RENITA","INDIA","DELOIS","SHANDA","PHILLIS","LORRI","ERLINDA","CRUZ","CATHRINE","BARB","ZOE","ISABELL","IONE","GISELA","CHARLIE","VALENCIA","ROXANNA","MAYME","KISHA","ELLIE","MELLISSA","DORRIS","DALIA","BELLA","ANNETTA","ZOILA","RETA","REINA","LAURETTA","KYLIE","CHRISTAL","PILAR","CHARLA","ELISSA","TIFFANI","TANA","PAULINA","LEOTA","BREANNA","JAYME","CARMEL","VERNELL","TOMASA","MANDI","DOMINGA","SANTA","MELODIE","LURA","ALEXA","TAMELA","RYAN","MIRNA","KERRIE","VENUS","NOEL","FELICITA","CRISTY","CARMELITA","BERNIECE","ANNEMARIE","TIARA","ROSEANNE","MISSY","CORI","ROXANA","PRICILLA","KRISTAL","JUNG","ELYSE","HAYDEE","ALETHA","BETTINA","MARGE","GILLIAN","FILOMENA","CHARLES","ZENAIDA","HARRIETTE","CARIDAD","VADA","UNA","ARETHA","PEARLINE","MARJORY","MARCELA","FLOR","EVETTE","ELOUISE","ALINA","TRINIDAD","DAVID","DAMARIS","CATHARINE","CARROLL","BELVA","NAKIA","MARLENA","LUANNE","LORINE","KARON","DORENE","DANITA","BRENNA","TATIANA","SAMMIE","LOUANN","LOREN","JULIANNA","ANDRIA","PHILOMENA","LUCILA","LEONORA","DOVIE","ROMONA","MIMI","JACQUELIN","GAYE","TONJA","MISTI","JOE","GENE","CHASTITY","STACIA","ROXANN","MICAELA","NIKITA","MEI","VELDA","MARLYS","JOHNNA","AURA","LAVERN","IVONNE","HAYLEY","NICKI","MAJORIE","HERLINDA","GEORGE","ALPHA","YADIRA","PERLA","GREGORIA","DANIEL","ANTONETTE","SHELLI","MOZELLE","MARIAH","JOELLE","CORDELIA","JOSETTE","CHIQUITA","TRISTA","LOUIS","LAQUITA","GEORGIANA","CANDI","SHANON","LONNIE","HILDEGARD","CECIL","VALENTINA","STEPHANY","MAGDA","KAROL","GERRY","GABRIELLA","TIANA","ROMA","RICHELLE","RAY","PRINCESS","OLETA","JACQUE","IDELLA","ALAINA","SUZANNA","JOVITA","BLAIR","TOSHA","RAVEN","NEREIDA","MARLYN","KYLA","JOSEPH","DELFINA","TENA","STEPHENIE","SABINA","NATHALIE","MARCELLE","GERTIE","DARLEEN","THEA","SHARONDA","SHANTEL","BELEN","VENESSA","ROSALINA","ONA","GENOVEVA","COREY","CLEMENTINE","ROSALBA","RENATE","RENATA","MI","IVORY","GEORGIANNA","FLOY","DORCAS","ARIANA","TYRA","THEDA","MARIAM","JULI","JESICA","DONNIE","VIKKI","VERLA","ROSELYN","MELVINA","JANNETTE","GINNY","DEBRAH","CORRIE","ASIA","VIOLETA","MYRTIS","LATRICIA","COLLETTE","CHARLEEN","ANISSA","VIVIANA","TWYLA","PRECIOUS","NEDRA","LATONIA","LAN","HELLEN","FABIOLA","ANNAMARIE","ADELL","SHARYN","CHANTAL","NIKI","MAUD","LIZETTE","LINDY","KIA","KESHA","JEANA","DANELLE","CHARLINE","CHANEL","CARROL","VALORIE","LIA","DORTHA","CRISTAL","SUNNY","LEONE","LEILANI","GERRI","DEBI","ANDRA","KESHIA","IMA","EULALIA","EASTER","DULCE","NATIVIDAD","LINNIE","KAMI","GEORGIE","CATINA","BROOK","ALDA","WINNIFRED","SHARLA","RUTHANN","MEAGHAN","MAGDALENE","LISSETTE","ADELAIDA","VENITA","TRENA","SHIRLENE","SHAMEKA","ELIZEBETH","DIAN","SHANTA","MICKEY","LATOSHA","CARLOTTA","WINDY","SOON","ROSINA","MARIANN","LEISA","JONNIE","DAWNA","CATHIE","BILLY","ASTRID","SIDNEY","LAUREEN","JANEEN","HOLLI","FAWN","VICKEY","TERESSA","SHANTE","RUBYE","MARCELINA","CHANDA","CARY","TERESE","SCARLETT","MARTY","MARNIE","LULU","LISETTE","JENIFFER","ELENOR","DORINDA","DONITA","CARMAN","BERNITA","ALTAGRACIA","ALETA","ADRIANNA","ZORAIDA","RONNIE","NICOLA","LYNDSEY","KENDALL","JANINA","CHRISSY","AMI","STARLA","PHYLIS","PHUONG","KYRA","CHARISSE","BLANCH","SANJUANITA","RONA","NANCI","MARILEE","MARANDA","CORY","BRIGETTE","SANJUANA","MARITA","KASSANDRA","JOYCELYN","IRA","FELIPA","CHELSIE","BONNY","MIREYA","LORENZA","KYONG","ILEANA","CANDELARIA","TONY","TOBY","SHERIE","OK","MARK","LUCIE","LEATRICE","LAKESHIA","GERDA","EDIE","BAMBI","MARYLIN","LAVON","HORTENSE","GARNET","EVIE","TRESSA","SHAYNA","LAVINA","KYUNG","JEANETTA","SHERRILL","SHARA","PHYLISS","MITTIE","ANABEL","ALESIA","THUY","TAWANDA","RICHARD","JOANIE","TIFFANIE","LASHANDA","KARISSA","ENRIQUETA","DARIA","DANIELLA","CORINNA","ALANNA","ABBEY","ROXANE","ROSEANNA","MAGNOLIA","LIDA","KYLE","JOELLEN","ERA","CORAL","CARLEEN","TRESA","PEGGIE","NOVELLA","NILA","MAYBELLE","JENELLE","CARINA","NOVA","MELINA","MARQUERITE","MARGARETTE","JOSEPHINA","EVONNE","DEVIN","CINTHIA","ALBINA","TOYA","TAWNYA","SHERITA","SANTOS","MYRIAM","LIZABETH","LISE","KEELY","JENNI","GISELLE","CHERYLE","ARDITH","ARDIS","ALESHA","ADRIANE","SHAINA","LINNEA","KAROLYN","HONG","FLORIDA","FELISHA","DORI","DARCI","ARTIE","ARMIDA","ZOLA","XIOMARA","VERGIE","SHAMIKA","NENA","NANNETTE","MAXIE","LOVIE","JEANE","JAIMIE","INGE","FARRAH","ELAINA","CAITLYN","STARR","FELICITAS","CHERLY","CARYL","YOLONDA","YASMIN","TEENA","PRUDENCE","PENNIE","NYDIA","MACKENZIE","ORPHA","MARVEL","LIZBETH","LAURETTE","JERRIE","HERMELINDA","CAROLEE","TIERRA","MIRIAN","META","MELONY","KORI","JENNETTE","JAMILA","ENA","ANH","YOSHIKO","SUSANNAH","SALINA","RHIANNON","JOLEEN","CRISTINE","ASHTON","ARACELY","TOMEKA","SHALONDA","MARTI","LACIE","KALA","JADA","ILSE","HAILEY","BRITTANI","ZONA","SYBLE","SHERRYL","RANDY","NIDIA","MARLO","KANDICE","KANDI","DEB","DEAN","AMERICA","ALYCIA","TOMMY","RONNA","NORENE","MERCY","JOSE","INGEBORG","GIOVANNA","GEMMA","CHRISTEL","AUDRY","ZORA","VITA","VAN","TRISH","STEPHAINE","SHIRLEE","SHANIKA","MELONIE","MAZIE","JAZMIN","INGA","HOA","HETTIE","GERALYN","FONDA","ESTRELLA","ADELLA","SU","SARITA","RINA","MILISSA","MARIBETH","GOLDA","EVON","ETHELYN","ENEDINA","CHERISE","CHANA","VELVA","TAWANNA","SADE","MIRTA","LI","KARIE","JACINTA","ELNA","DAVINA","CIERRA","ASHLIE","ALBERTHA","TANESHA","STEPHANI","NELLE","MINDI","LU","LORINDA","LARUE","FLORENE","DEMETRA","DEDRA","CIARA","CHANTELLE","ASHLY","SUZY","ROSALVA","NOELIA","LYDA","LEATHA","KRYSTYNA","KRISTAN","KARRI","DARLINE","DARCIE","CINDA","CHEYENNE","CHERRIE","AWILDA","ALMEDA","ROLANDA","LANETTE","JERILYN","GISELE","EVALYN","CYNDI","CLETA","CARIN","ZINA","ZENA","VELIA","TANIKA","PAUL","CHARISSA","THOMAS","TALIA","MARGARETE","LAVONDA","KAYLEE","KATHLENE","JONNA","IRENA","ILONA","IDALIA","CANDIS","CANDANCE","BRANDEE","ANITRA","ALIDA","SIGRID","NICOLETTE","MARYJO","LINETTE","HEDWIG","CHRISTIANA","CASSIDY","ALEXIA","TRESSIE","MODESTA","LUPITA","LITA","GLADIS","EVELIA","DAVIDA","CHERRI","CECILY","ASHELY","ANNABEL","AGUSTINA","WANITA","SHIRLY","ROSAURA","HULDA","EUN","BAILEY","YETTA","VERONA","THOMASINA","SIBYL","SHANNAN","MECHELLE","LUE","LEANDRA","LANI","KYLEE","KANDY","JOLYNN","FERNE","EBONI","CORENE","ALYSIA","ZULA","NADA","MOIRA","LYNDSAY","LORRETTA","JUAN","JAMMIE","HORTENSIA","GAYNELL","CAMERON","ADRIA","VINA","VICENTA","TANGELA","STEPHINE","NORINE","NELLA","LIANA","LESLEE","KIMBERELY","ILIANA","GLORY","FELICA","EMOGENE","ELFRIEDE","EDEN","EARTHA","CARMA","BEA","OCIE","MARRY","LENNIE","KIARA","JACALYN","CARLOTA","ARIELLE","YU","STAR","OTILIA","KIRSTIN","KACEY","JOHNETTA","JOEY","JOETTA","JERALDINE","JAUNITA","ELANA","DORTHEA","CAMI","AMADA","ADELIA","VERNITA","TAMAR","SIOBHAN","RENEA","RASHIDA","OUIDA","ODELL","NILSA","MERYL","KRISTYN","JULIETA","DANICA","BREANNE","AUREA","ANGLEA","SHERRON","ODETTE","MALIA","LORELEI","LIN","LEESA","KENNA","KATHLYN","FIONA","CHARLETTE","SUZIE","SHANTELL","SABRA","RACQUEL","MYONG","MIRA","MARTINE","LUCIENNE","LAVADA","JULIANN","JOHNIE","ELVERA","DELPHIA","CLAIR","CHRISTIANE","CHAROLETTE","CARRI","AUGUSTINE","ASHA","ANGELLA","PAOLA","NINFA","LEDA","LAI","EDA","SUNSHINE","STEFANI","SHANELL","PALMA","MACHELLE","LISSA","KECIA","KATHRYNE","KARLENE","JULISSA","JETTIE","JENNIFFER","HUI","CORRINA","CHRISTOPHER","CAROLANN","ALENA","TESS","ROSARIA","MYRTICE","MARYLEE","LIANE","KENYATTA","JUDIE","JANEY","IN","ELMIRA","ELDORA","DENNA","CRISTI","CATHI","ZAIDA","VONNIE","VIVA","VERNIE","ROSALINE","MARIELA","LUCIANA","LESLI","KARAN","FELICE","DENEEN","ADINA","WYNONA","TARSHA","SHERON","SHASTA","SHANITA","SHANI","SHANDRA","RANDA","PINKIE","PARIS","NELIDA","MARILOU","LYLA","LAURENE","LACI","JOI","JANENE","DOROTHA","DANIELE","DANI","CAROLYNN","CARLYN","BERENICE","AYESHA","ANNELIESE","ALETHEA","THERSA","TAMIKO","RUFINA","OLIVA","MOZELL","MARYLYN","MADISON","KRISTIAN","KATHYRN","KASANDRA","KANDACE","JANAE","GABRIEL","DOMENICA","DEBBRA","DANNIELLE","CHUN","BUFFY","BARBIE","ARCELIA","AJA","ZENOBIA","SHAREN","SHAREE","PATRICK","PAGE","MY","LAVINIA","KUM","KACIE","JACKELINE","HUONG","FELISA","EMELIA","ELEANORA","CYTHIA","CRISTIN","CLYDE","CLARIBEL","CARON","ANASTACIA","ZULMA","ZANDRA","YOKO","TENISHA","SUSANN","SHERILYN","SHAY","SHAWANDA","SABINE","ROMANA","MATHILDA","LINSEY","KEIKO","JOANA","ISELA","GRETTA","GEORGETTA","EUGENIE","DUSTY","DESIRAE","DELORA","CORAZON","ANTONINA","ANIKA","WILLENE","TRACEE","TAMATHA","REGAN","NICHELLE","MICKIE","MAEGAN","LUANA","LANITA","KELSIE","EDELMIRA","BREE","AFTON","TEODORA","TAMIE","SHENA","MEG","LINH","KELI","KACI","DANYELLE","BRITT","ARLETTE","ALBERTINE","ADELLE","TIFFINY","STORMY","SIMONA","NUMBERS","NICOLASA","NICHOL","NIA","NAKISHA","MEE","MAIRA","LOREEN","KIZZY","JOHNNY","JAY","FALLON","CHRISTENE","BOBBYE","ANTHONY","YING","VINCENZA","TANJA","RUBIE","RONI","QUEENIE","MARGARETT","KIMBERLI","IRMGARD","IDELL","HILMA","EVELINA","ESTA","EMILEE","DENNISE","DANIA","CARL","CARIE","ANTONIO","WAI","SANG","RISA","RIKKI","PARTICIA","MUI","MASAKO","MARIO","LUVENIA","LOREE","LONI","LIEN","KEVIN","GIGI","FLORENCIA","DORIAN","DENITA","DALLAS","CHI","BILLYE","ALEXANDER","TOMIKA","SHARITA","RANA","NIKOLE","NEOMA","MARGARITE","MADALYN","LUCINA","LAILA","KALI","JENETTE","GABRIELE","EVELYNE","ELENORA","CLEMENTINA","ALEJANDRINA","ZULEMA","VIOLETTE","VANNESSA","THRESA","RETTA","PIA","PATIENCE","NOELLA","NICKIE","JONELL","DELTA","CHUNG","CHAYA","CAMELIA","BETHEL","ANYA","ANDREW","THANH","SUZANN","SPRING","SHU","MILA","LILLA","LAVERNA","KEESHA","KATTIE","GIA","GEORGENE","EVELINE","ESTELL","ELIZBETH","VIVIENNE","VALLIE","TRUDIE","STEPHANE","MICHEL","MAGALY","MADIE","KENYETTA","KARREN","JANETTA","HERMINE","HARMONY","DRUCILLA","DEBBI","CELESTINA","CANDIE","BRITNI","BECKIE","AMINA","ZITA","YUN","YOLANDE","VIVIEN","VERNETTA","TRUDI","SOMMER","PEARLE","PATRINA","OSSIE","NICOLLE","LOYCE","LETTY","LARISA","KATHARINA","JOSELYN","JONELLE","JENELL","IESHA","HEIDE","FLORINDA","FLORENTINA","FLO","ELODIA","DORINE","BRUNILDA","BRIGID","ASHLI","ARDELLA","TWANA","THU","TARAH","SUNG","SHEA","SHAVON","SHANE","SERINA","RAYNA","RAMONITA","NGA","MARGURITE","LUCRECIA","KOURTNEY","KATI","JESUS","JESENIA","DIAMOND","CRISTA","AYANA","ALICA","ALIA","VINNIE","SUELLEN","ROMELIA","RACHELL","PIPER","OLYMPIA","MICHIKO","KATHALEEN","JOLIE","JESSI","JANESSA","HANA","HA","ELEASE","CARLETTA","BRITANY","SHONA","SALOME","ROSAMOND","REGENA","RAINA","NGOC","NELIA","LOUVENIA","LESIA","LATRINA","LATICIA","LARHONDA","JINA","JACKI","HOLLIS","HOLLEY","EMMY","DEEANN","CORETTA","ARNETTA","VELVET","THALIA","SHANICE","NETA","MIKKI","MICKI","LONNA","LEANA","LASHUNDA","KILEY","JOYE","JACQULYN","IGNACIA","HYUN","HIROKO","HENRY","HENRIETTE","ELAYNE","DELINDA","DARNELL","DAHLIA","COREEN","CONSUELA","CONCHITA","CELINE","BABETTE","AYANNA","ANETTE","ALBERTINA","SKYE","SHAWNEE","SHANEKA","QUIANA","PAMELIA","MIN","MERRI","MERLENE","MARGIT","KIESHA","KIERA","KAYLENE","JODEE","JENISE","ERLENE","EMMIE","ELSE","DARYL","DALILA","DAISEY","CODY","CASIE","BELIA","BABARA","VERSIE","VANESA","SHELBA","SHAWNDA","SAM","NORMAN","NIKIA","NAOMA","MARNA","MARGERET","MADALINE","LAWANA","KINDRA","JUTTA","JAZMINE","JANETT","HANNELORE","GLENDORA","GERTRUD","GARNETT","FREEDA","FREDERICA","FLORANCE","FLAVIA","DENNIS","CARLINE","BEVERLEE","ANJANETTE","VALDA","TRINITY","TAMALA","STEVIE","SHONNA","SHA","SARINA","ONEIDA","MICAH","MERILYN","MARLEEN","LURLINE","LENNA","KATHERIN","JIN","JENI","HAE","GRACIA","GLADY","FARAH","ERIC","ENOLA","EMA","DOMINQUE","DEVONA","DELANA","CECILA","CAPRICE","ALYSHA","ALI","ALETHIA","VENA","THERESIA","TAWNY","SONG","SHAKIRA","SAMARA","SACHIKO","RACHELE","PAMELLA","NICKY","MARNI","MARIEL","MAREN","MALISA","LIGIA","LERA","LATORIA","LARAE","KIMBER","KATHERN","KAREY","JENNEFER","JANETH","HALINA","FREDIA","DELISA","DEBROAH","CIERA","CHIN","ANGELIKA","ANDREE","ALTHA","YEN","VIVAN","TERRESA","TANNA","SUK","SUDIE","SOO","SIGNE","SALENA","RONNI","REBBECCA","MYRTIE","MCKENZIE","MALIKA","MAIDA","LOAN","LEONARDA","KAYLEIGH","FRANCE","ETHYL","ELLYN","DAYLE","CAMMIE","BRITTNI","BIRGIT","AVELINA","ASUNCION","ARIANNA","AKIKO","VENICE","TYESHA","TONIE","TIESHA","TAKISHA","STEFFANIE","SINDY","SANTANA","MEGHANN","MANDA","MACIE","LADY","KELLYE","KELLEE","JOSLYN","JASON","INGER","INDIRA","GLINDA","GLENNIS","FERNANDA","FAUSTINA","ENEIDA","ELICIA","DOT","DIGNA","DELL","ARLETTA","ANDRE","WILLIA","TAMMARA","TABETHA","SHERRELL","SARI","REFUGIO","REBBECA","PAULETTA","NIEVES","NATOSHA","NAKITA","MAMMIE","KENISHA","KAZUKO","KASSIE","GARY","EARLEAN","DAPHINE","CORLISS","CLOTILDE","CAROLYNE","BERNETTA","AUGUSTINA","AUDREA","ANNIS","ANNABELL","YAN","TENNILLE","TAMICA","SELENE","SEAN","ROSANA","REGENIA","QIANA","MARKITA","MACY","LEEANNE","LAURINE","KYM","JESSENIA","JANITA","GEORGINE","GENIE","EMIKO","ELVIE","DEANDRA","DAGMAR","CORIE","COLLEN","CHERISH","ROMAINE","PORSHA","PEARLENE","MICHELINE","MERNA","MARGORIE","MARGARETTA","LORE","KENNETH","JENINE","HERMINA","FREDERICKA","ELKE","DRUSILLA","DORATHY","DIONE","DESIRE","CELENA","BRIGIDA","ANGELES","ALLEGRA","THEO","TAMEKIA","SYNTHIA","STEPHEN","SOOK","SLYVIA","ROSANN","REATHA","RAYE","MARQUETTA","MARGART","LING","LAYLA","KYMBERLY","KIANA","KAYLEEN","KATLYN","KARMEN","JOELLA","IRINA","EMELDA","ELENI","DETRA","CLEMMIE","CHERYLL","CHANTELL","CATHEY","ARNITA","ARLA","ANGLE","ANGELIC","ALYSE","ZOFIA","THOMASINE","TENNIE","SON","SHERLY","SHERLEY","SHARYL","REMEDIOS","PETRINA","NICKOLE","MYUNG","MYRLE","MOZELLA","LOUANNE","LISHA","LATIA","LANE","KRYSTA","JULIENNE","JOEL","JEANENE","JACQUALINE","ISAURA","GWENDA","EARLEEN","DONALD","CLEOPATRA","CARLIE","AUDIE","ANTONIETTA","ALISE","ALEX","VERDELL","VAL","TYLER","TOMOKO","THAO","TALISHA","STEVEN","SO","SHEMIKA","SHAUN","SCARLET","SAVANNA","SANTINA","ROSIA","RAEANN","ODILIA","NANA","MINNA","MAGAN","LYNELLE","LE","KARMA","JOEANN","IVANA","INELL","ILANA","HYE","HONEY","HEE","GUDRUN","FRANK","DREAMA","CRISSY","CHANTE","CARMELINA","ARVILLA","ARTHUR","ANNAMAE","ALVERA","ALEIDA","AARON","YEE","YANIRA","VANDA","TIANNA","TAM","STEFANIA","SHIRA","PERRY","NICOL","NANCIE","MONSERRATE","MINH","MELYNDA","MELANY","MATTHEW","LOVELLA","LAURE","KIRBY","KACY","JACQUELYNN","HYON","GERTHA","FRANCISCO","ELIANA","CHRISTENA","CHRISTEEN","CHARISE","CATERINA","CARLEY","CANDYCE","ARLENA","AMMIE","YANG","WILLETTE","VANITA","TUYET","TINY","SYREETA","SILVA","SCOTT","RONALD","PENNEY","NYLA","MICHAL","MAURICE","MARYAM","MARYA","MAGEN","LUDIE","LOMA","LIVIA","LANELL","KIMBERLIE","JULEE","DONETTA","DIEDRA","DENISHA","DEANE","DAWNE","CLARINE","CHERRYL","BRONWYN","BRANDON","ALLA","VALERY","TONDA","SUEANN","SORAYA","SHOSHANA","SHELA","SHARLEEN","SHANELLE","NERISSA","MICHEAL","MERIDITH","MELLIE","MAYE","MAPLE","MAGARET","LUIS","LILI","LEONILA","LEONIE","LEEANNA","LAVONIA","LAVERA","KRISTEL","KATHEY","KATHE","JUSTIN","JULIAN","JIMMY","JANN","ILDA","HILDRED","HILDEGARDE","GENIA","FUMIKO","EVELIN","ERMELINDA","ELLY","DUNG","DOLORIS","DIONNA","DANAE","BERNEICE","ANNICE","ALIX","VERENA","VERDIE","TRISTAN","SHAWNNA","SHAWANA","SHAUNNA","ROZELLA","RANDEE","RANAE","MILAGRO","LYNELL","LUISE","LOUIE","LOIDA","LISBETH","KARLEEN","JUNITA","JONA","ISIS","HYACINTH","HEDY","GWENN","ETHELENE","ERLINE","EDWARD","DONYA","DOMONIQUE","DELICIA","DANNETTE","CICELY","BRANDA","BLYTHE","BETHANN","ASHLYN","ANNALEE","ALLINE","YUKO","VELLA","TRANG","TOWANDA","TESHA","SHERLYN","NARCISA","MIGUELINA","MERI","MAYBELL","MARLANA","MARGUERITA","MADLYN","LUNA","LORY","LORIANN","LIBERTY","LEONORE","LEIGHANN","LAURICE","LATESHA","LARONDA","KATRICE","KASIE","KARL","KALEY","JADWIGA","GLENNIE","GEARLDINE","FRANCINA","EPIFANIA","DYAN","DORIE","DIEDRE","DENESE","DEMETRICE","DELENA","DARBY","CRISTIE","CLEORA","CATARINA","CARISA","BERNIE","BARBERA","ALMETA","TRULA","TEREASA","SOLANGE","SHEILAH","SHAVONNE","SANORA","ROCHELL","MATHILDE","MARGARETA","MAIA","LYNSEY","LAWANNA","LAUNA","KENA","KEENA","KATIA","JAMEY","GLYNDA","GAYLENE","ELVINA","ELANOR","DANUTA","DANIKA","CRISTEN","CORDIE","COLETTA","CLARITA","CARMON","BRYNN","AZUCENA","AUNDREA","ANGELE","YI","WALTER","VERLIE","VERLENE","TAMESHA","SILVANA","SEBRINA","SAMIRA","REDA","RAYLENE","PENNI","PANDORA","NORAH","NOMA","MIREILLE","MELISSIA","MARYALICE","LARAINE","KIMBERY","KARYL","KARINE","KAM","JOLANDA","JOHANA","JESUSA","JALEESA","JAE","JACQUELYNE","IRISH","ILUMINADA","HILARIA","HANH","GENNIE","FRANCIE","FLORETTA","EXIE","EDDA","DREMA","DELPHA","BEV","BARBAR","ASSUNTA","ARDELL","ANNALISA","ALISIA","YUKIKO","YOLANDO","WONDA","WEI","WALTRAUD","VETA","TEQUILA","TEMEKA","TAMEIKA","SHIRLEEN","SHENITA","PIEDAD","OZELLA","MIRTHA","MARILU","KIMIKO","JULIANE","JENICE","JEN","JANAY","JACQUILINE","HILDE","FE","FAE","EVAN","EUGENE","ELOIS","ECHO","DEVORAH","CHAU","BRINDA","BETSEY","ARMINDA","ARACELIS","APRYL","ANNETT","ALISHIA","VEOLA","USHA","TOSHIKO","THEOLA","TASHIA","TALITHA","SHERY","RUDY","RENETTA","REIKO","RASHEEDA","OMEGA","OBDULIA","MIKA","MELAINE","MEGGAN","MARTIN","MARLEN","MARGET","MARCELINE","MANA","MAGDALEN","LIBRADA","LEZLIE","LEXIE","LATASHIA","LASANDRA","KELLE","ISIDRA","ISA","INOCENCIA","GWYN","FRANCOISE","ERMINIA","ERINN","DIMPLE","DEVORA","CRISELDA","ARMANDA","ARIE","ARIANE","ANGELO","ANGELENA","ALLEN","ALIZA","ADRIENE","ADALINE","XOCHITL","TWANNA","TRAN","TOMIKO","TAMISHA","TAISHA","SUSY","SIU","RUTHA","ROXY","RHONA","RAYMOND","OTHA","NORIKO","NATASHIA","MERRIE","MELVIN","MARINDA","MARIKO","MARGERT","LORIS","LIZZETTE","LEISHA","KAILA","KA","JOANNIE","JERRICA","JENE","JANNET","JANEE","JACINDA","HERTA","ELENORE","DORETTA","DELAINE","DANIELL","CLAUDIE","CHINA","BRITTA","APOLONIA","AMBERLY","ALEASE","YURI","YUK","WEN","WANETA","UTE","TOMI","SHARRI","SANDIE","ROSELLE","REYNALDA","RAGUEL","PHYLICIA","PATRIA","OLIMPIA","ODELIA","MITZIE","MITCHELL","MISS","MINDA","MIGNON","MICA","MENDY","MARIVEL","MAILE","LYNETTA","LAVETTE","LAURYN","LATRISHA","LAKIESHA","KIERSTEN","KARY","JOSPHINE","JOLYN","JETTA","JANISE","JACQUIE","IVELISSE","GLYNIS","GIANNA","GAYNELLE","EMERALD","DEMETRIUS","DANYELL","DANILLE","DACIA","CORALEE","CHER","CEOLA","BRETT","BELL","ARIANNE","ALESHIA","YUNG","WILLIEMAE","TROY","TRINH","THORA","TAI","SVETLANA","SHERIKA","SHEMEKA","SHAUNDA","ROSELINE","RICKI","MELDA","MALLIE","LAVONNA","LATINA","LARRY","LAQUANDA","LALA","LACHELLE","KLARA","KANDIS","JOHNA","JEANMARIE","JAYE","HANG","GRAYCE","GERTUDE","EMERITA","EBONIE","CLORINDA","CHING","CHERY","CAROLA","BREANN","BLOSSOM","BERNARDINE","BECKI","ARLETHA","ARGELIA","ARA","ALITA","YULANDA","YON","YESSENIA","TOBI","TASIA","SYLVIE","SHIRL","SHIRELY","SHERIDAN","SHELLA","SHANTELLE","SACHA","ROYCE","REBECKA","REAGAN","PROVIDENCIA","PAULENE","MISHA","MIKI","MARLINE","MARICA","LORITA","LATOYIA","LASONYA","KERSTIN","KENDA","KEITHA","KATHRIN","JAYMIE","JACK","GRICELDA","GINETTE","ERYN","ELINA","ELFRIEDA","DANYEL","CHEREE","CHANELLE","BARRIE","AVERY","AURORE","ANNAMARIA","ALLEEN","AILENE","AIDE","YASMINE","VASHTI","VALENTINE","TREASA","TORY","TIFFANEY","SHERYLL","SHARIE","SHANAE","SAU","RAISA","PA","NEDA","MITSUKO","MIRELLA","MILDA","MARYANNA","MARAGRET","MABELLE","LUETTA","LORINA","LETISHA","LATARSHA","LANELLE","LAJUANA","KRISSY","KARLY","KARENA","JON","JESSIKA","JERICA","JEANELLE","JANUARY","JALISA","JACELYN","IZOLA","IVEY","GREGORY","EUNA","ETHA","DREW","DOMITILA","DOMINICA","DAINA","CREOLA","CARLI","CAMIE","BUNNY","BRITTNY","ASHANTI","ANISHA","ALEEN","ADAH","YASUKO","WINTER","VIKI","VALRIE","TONA","TINISHA","THI","TERISA","TATUM","TANEKA","SIMONNE","SHALANDA","SERITA","RESSIE","REFUGIA","PAZ","OLENE","NA","MERRILL","MARGHERITA","MANDIE","MAN","MAIRE","LYNDIA","LUCI","LORRIANE","LORETA","LEONIA","LAVONA","LASHAWNDA","LAKIA","KYOKO","KRYSTINA","KRYSTEN","KENIA","KELSI","JUDE","JEANICE","ISOBEL","GEORGIANN","GENNY","FELICIDAD","EILENE","DEON","DELOISE","DEEDEE","DANNIE","CONCEPTION","CLORA","CHERILYN","CHANG","CALANDRA","BERRY","ARMANDINA","ANISA","ULA","TIMOTHY","TIERA","THERESSA","STEPHANIA","SIMA","SHYLA","SHONTA","SHERA","SHAQUITA","SHALA","SAMMY","ROSSANA","NOHEMI","NERY","MORIAH","MELITA","MELIDA","MELANI","MARYLYNN","MARISHA","MARIETTE","MALORIE","MADELENE","LUDIVINA","LORIA","LORETTE","LORALEE","LIANNE","LEON","LAVENIA","LAURINDA","LASHON","KIT","KIMI","KEILA","KATELYNN","KAI","JONE","JOANE","JI","JAYNA","JANELLA","JA","HUE","HERTHA","FRANCENE","ELINORE","DESPINA","DELSIE","DEEDRA","CLEMENCIA","CARRY","CAROLIN","CARLOS","BULAH","BRITTANIE","BOK","BLONDELL","BIBI","BEAULAH","BEATA","ANNITA","AGRIPINA","VIRGEN","VALENE","UN","TWANDA","TOMMYE","TOI","TARRA","TARI","TAMMERA","SHAKIA","SADYE","RUTHANNE","ROCHEL","RIVKA","PURA","NENITA","NATISHA","MING","MERRILEE","MELODEE","MARVIS","LUCILLA","LEENA","LAVETA","LARITA","LANIE","KEREN","ILEEN","GEORGEANN","GENNA","GENESIS","FRIDA","EWA","EUFEMIA","EMELY","ELA","EDYTH","DEONNA","DEADRA","DARLENA","CHANELL","CHAN","CATHERN","CASSONDRA","CASSAUNDRA","BERNARDA","BERNA","ARLINDA","ANAMARIA","ALBERT","WESLEY","VERTIE","VALERI","TORRI","TATYANA","STASIA","SHERISE","SHERILL","SEASON","SCOTTIE","SANDA","RUTHE","ROSY","ROBERTO","ROBBI","RANEE","QUYEN","PEARLY","PALMIRA","ONITA","NISHA","NIESHA","NIDA","NEVADA","NAM","MERLYN","MAYOLA","MARYLOUISE","MARYLAND","MARX","MARTH","MARGENE","MADELAINE","LONDA","LEONTINE","LEOMA","LEIA","LAWRENCE","LAURALEE","LANORA","LAKITA","KIYOKO","KETURAH","KATELIN","KAREEN","JONIE","JOHNETTE","JENEE","JEANETT","IZETTA","HIEDI","HEIKE","HASSIE","HAROLD","GIUSEPPINA","GEORGANN","FIDELA","FERNANDE","ELWANDA","ELLAMAE","ELIZ","DUSTI","DOTTY","CYNDY","CORALIE","CELESTA","ARGENTINA","ALVERTA","XENIA","WAVA","VANETTA","TORRIE","TASHINA","TANDY","TAMBRA","TAMA","STEPANIE","SHILA","SHAUNTA","SHARAN","SHANIQUA","SHAE","SETSUKO","SERAFINA","SANDEE","ROSAMARIA","PRISCILA","OLINDA","NADENE","MUOI","MICHELINA","MERCEDEZ","MARYROSE","MARIN","MARCENE","MAO","MAGALI","MAFALDA","LOGAN","LINN","LANNIE","KAYCE","KAROLINE","KAMILAH","KAMALA","JUSTA","JOLINE","JENNINE","JACQUETTA","IRAIDA","GERALD","GEORGEANNA","FRANCHESCA","FAIRY","EMELINE","ELANE","EHTEL","EARLIE","DULCIE","DALENE","CRIS","CLASSIE","CHERE","CHARIS","CAROYLN","CARMINA","CARITA","BRIAN","BETHANIE","AYAKO","ARICA","AN","ALYSA","ALESSANDRA","AKILAH","ADRIEN","ZETTA","YOULANDA","YELENA","YAHAIRA","XUAN","WENDOLYN","VICTOR","TIJUANA","TERRELL","TERINA","TERESIA","SUZI","SUNDAY","SHERELL","SHAVONDA","SHAUNTE","SHARDA","SHAKITA","SENA","RYANN","RUBI","RIVA","REGINIA","REA","RACHAL","PARTHENIA","PAMULA","MONNIE","MONET","MICHAELE","MELIA","MARINE","MALKA","MAISHA","LISANDRA","LEO","LEKISHA","LEAN","LAURENCE","LAKENDRA","KRYSTIN","KORTNEY","KIZZIE","KITTIE","KERA","KENDAL","KEMBERLY","KANISHA","JULENE","JULE","JOSHUA","JOHANNE","JEFFREY","JAMEE","HAN","HALLEY","GIDGET","GALINA","FREDRICKA","FLETA","FATIMAH","EUSEBIA","ELZA","ELEONORE","DORTHEY","DORIA","DONELLA","DINORAH","DELORSE","CLARETHA","CHRISTINIA","CHARLYN","BONG","BELKIS","AZZIE","ANDERA","AIKO","ADENA","YER","YAJAIRA","WAN","VANIA","ULRIKE","TOSHIA","TIFANY","STEFANY","SHIZUE","SHENIKA","SHAWANNA","SHAROLYN","SHARILYN","SHAQUANA","SHANTAY","SEE","ROZANNE","ROSELEE","RICKIE","REMONA","REANNA","RAELENE","QUINN","PHUNG","PETRONILA","NATACHA","NANCEY","MYRL","MIYOKO","MIESHA","MERIDETH","MARVELLA","MARQUITTA","MARHTA","MARCHELLE","LIZETH","LIBBIE","LAHOMA","LADAWN","KINA","KATHELEEN","KATHARYN","KARISA","KALEIGH","JUNIE","JULIEANN","JOHNSIE","JANEAN","JAIMEE","JACKQUELINE","HISAKO","HERMA","HELAINE","GWYNETH","GLENN","GITA","EUSTOLIA","EMELINA","ELIN","EDRIS","DONNETTE","DONNETTA","DIERDRE","DENAE","DARCEL","CLAUDE","CLARISA","CINDERELLA","CHIA","CHARLESETTA","CHARITA","CELSA","CASSY","CASSI","CARLEE","BRUNA","BRITTANEY","BRANDE","BILLI","BAO","ANTONETTA","ANGLA","ANGELYN","ANALISA","ALANE","WENONA","WENDIE","VERONIQUE","VANNESA","TOBIE","TEMPIE","SUMIKO","SULEMA","SPARKLE","SOMER","SHEBA","SHAYNE","SHARICE","SHANEL","SHALON","SAGE","ROY","ROSIO","ROSELIA","RENAY","REMA","REENA","PORSCHE","PING","PEG","OZIE","ORETHA","ORALEE","ODA","NU","NGAN","NAKESHA","MILLY","MARYBELLE","MARLIN","MARIS","MARGRETT","MARAGARET","MANIE","LURLENE","LILLIA","LIESELOTTE","LAVELLE","LASHAUNDA","LAKEESHA","KEITH","KAYCEE","KALYN","JOYA","JOETTE","JENAE","JANIECE","ILLA","GRISEL","GLAYDS","GENEVIE","GALA","FREDDA","FRED","ELMER","ELEONOR","DEBERA","DEANDREA","DAN","CORRINNE","CORDIA","CONTESSA","COLENE","CLEOTILDE","CHARLOTT","CHANTAY","CECILLE","BEATRIS","AZALEE","ARLEAN","ARDATH","ANJELICA","ANJA","ALFREDIA","ALEISHA","ADAM","ZADA","YUONNE","XIAO","WILLODEAN","WHITLEY","VENNIE","VANNA","TYISHA","TOVA","TORIE","TONISHA","TILDA","TIEN","TEMPLE","SIRENA","SHERRIL","SHANTI","SHAN","SENAIDA","SAMELLA","ROBBYN","RENDA","REITA","PHEBE","PAULITA","NOBUKO","NGUYET","NEOMI","MOON","MIKAELA","MELANIA","MAXIMINA","MARG","MAISIE","LYNNA","LILLI","LAYNE","LASHAUN","LAKENYA","LAEL","KIRSTIE","KATHLINE","KASHA","KARLYN","KARIMA","JOVAN","JOSEFINE","JENNELL","JACQUI","JACKELYN","HYO","HIEN","GRAZYNA","FLORRIE","FLORIA","ELEONORA","DWANA","DORLA","DONG","DELMY","DEJA","DEDE","DANN","CRYSTA","CLELIA","CLARIS","CLARENCE","CHIEKO","CHERLYN","CHERELLE","CHARMAIN","CHARA","CAMMY","BEE","ARNETTE","ARDELLE","ANNIKA","AMIEE","AMEE","ALLENA","YVONE","YUKI","YOSHIE","YEVETTE","YAEL","WILLETTA","VONCILE","VENETTA","TULA","TONETTE","TIMIKA","TEMIKA","TELMA","TEISHA","TAREN","TA","STACEE","SHIN","SHAWNTA","SATURNINA","RICARDA","POK","PASTY","ONIE","NUBIA","MORA","MIKE","MARIELLE","MARIELLA","MARIANELA","MARDELL","MANY","LUANNA","LOISE","LISABETH","LINDSY","LILLIANA","LILLIAM","LELAH","LEIGHA","LEANORA","LANG","KRISTEEN","KHALILAH","KEELEY","KANDRA","JUNKO","JOAQUINA","JERLENE","JANI","JAMIKA","JAME","HSIU","HERMILA","GOLDEN","GENEVIVE","EVIA","EUGENA","EMMALINE","ELFREDA","ELENE","DONETTE","DELCIE","DEEANNA","DARCEY","CUC","CLARINDA","CIRA","CHAE","CELINDA","CATHERYN","CATHERIN","CASIMIRA","CARMELIA","CAMELLIA","BREANA","BOBETTE","BERNARDINA","BEBE","BASILIA","ARLYNE","AMAL","ALAYNA","ZONIA","ZENIA","YURIKO","YAEKO","WYNELL","WILLOW","WILLENA","VERNIA","TU","TRAVIS","TORA","TERRILYN","TERICA","TENESHA","TAWNA","TAJUANA","TAINA","STEPHNIE","SONA","SOL","SINA","SHONDRA","SHIZUKO","SHERLENE","SHERICE","SHARIKA","ROSSIE","ROSENA","RORY","RIMA","RIA","RHEBA","RENNA","PETER","NATALYA","NANCEE","MELODI","MEDA","MAXIMA","MATHA","MARKETTA","MARICRUZ","MARCELENE","MALVINA","LUBA","LOUETTA","LEIDA","LECIA","LAURAN","LASHAWNA","LAINE","KHADIJAH","KATERINE","KASI","KALLIE","JULIETTA","JESUSITA","JESTINE","JESSIA","JEREMY","JEFFIE","JANYCE","ISADORA","GEORGIANNE","FIDELIA","EVITA","EURA","EULAH","ESTEFANA","ELSY","ELIZABET","ELADIA","DODIE","DION","DIA","DENISSE","DELORAS","DELILA","DAYSI","DAKOTA","CURTIS","CRYSTLE","CONCHA","COLBY","CLARETTA","CHU","CHRISTIA","CHARLSIE","CHARLENA","CARYLON","BETTYANN","ASLEY","ASHLEA","AMIRA","AI","AGUEDA","AGNUS","YUETTE","VINITA","VICTORINA","TYNISHA","TREENA","TOCCARA","TISH","THOMASENA","TEGAN","SOILA","SHILOH","SHENNA","SHARMAINE","SHANTAE","SHANDI","SEPTEMBER","SARAN","SARAI","SANA","SAMUEL","SALLEY","ROSETTE","ROLANDE","REGINE","OTELIA","OSCAR","OLEVIA","NICHOLLE","NECOLE","NAIDA","MYRTA","MYESHA","MITSUE","MINTA","MERTIE","MARGY","MAHALIA","MADALENE","LOVE","LOURA","LOREAN","LEWIS","LESHA","LEONIDA","LENITA","LAVONE","LASHELL","LASHANDRA","LAMONICA","KIMBRA","KATHERINA","KARRY","KANESHA","JULIO","JONG","JENEVA","JAQUELYN","HWA","GILMA","GHISLAINE","GERTRUDIS","FRANSISCA","FERMINA","ETTIE","ETSUKO","ELLIS","ELLAN","ELIDIA","EDRA","DORETHEA","DOREATHA","DENYSE","DENNY","DEETTA","DAINE","CYRSTAL","CORRIN","CAYLA","CARLITA","CAMILA","BURMA","BULA","BUENA","BLAKE","BARABARA","AVRIL","AUSTIN","ALAINE","ZANA","WILHEMINA","WANETTA","VIRGIL","VI","VERONIKA","VERNON","VERLINE","VASILIKI","TONITA","TISA","TEOFILA","TAYNA","TAUNYA","TANDRA","TAKAKO","SUNNI","SUANNE","SIXTA","SHARELL","SEEMA","RUSSELL","ROSENDA","ROBENA","RAYMONDE","PEI","PAMILA","OZELL","NEIDA","NEELY","MISTIE","MICHA","MERISSA","MAURITA","MARYLN","MARYETTA","MARSHALL","MARCELL","MALENA","MAKEDA","MADDIE","LOVETTA","LOURIE","LORRINE","LORILEE","LESTER","LAURENA","LASHAY","LARRAINE","LAREE","LACRESHA","KRISTLE","KRISHNA","KEVA","KEIRA","KAROLE","JOIE","JINNY","JEANNETTA","JAMA","HEIDY","GILBERTE","GEMA","FAVIOLA","EVELYNN","ENDA","ELLI","ELLENA","DIVINA","DAGNY","COLLENE","CODI","CINDIE","CHASSIDY","CHASIDY","CATRICE","CATHERINA","CASSEY","CAROLL","CARLENA","CANDRA","CALISTA","BRYANNA","BRITTENY","BEULA","BARI","AUDRIE","AUDRIA","ARDELIA","ANNELLE","ANGILA","ALONA","ALLYN","DOUGLAS","ROGER","JONATHAN","RALPH","NICHOLAS","BENJAMIN","BRUCE","HARRY","WAYNE","STEVE","HOWARD","ERNEST","PHILLIP","TODD","CRAIG","ALAN","PHILIP","EARL","DANNY","BRYAN","STANLEY","LEONARD","NATHAN","MANUEL","RODNEY","MARVIN","VINCENT","JEFFERY","JEFF","CHAD","JACOB","ALFRED","BRADLEY","HERBERT","FREDERICK","EDWIN","DON","RICKY","RANDALL","BARRY","BERNARD","LEROY","MARCUS","THEODORE","CLIFFORD","MIGUEL","JIM","TOM","CALVIN","BILL","LLOYD","DEREK","WARREN","DARRELL","JEROME","FLOYD","ALVIN","TIM","GORDON","GREG","JORGE","DUSTIN","PEDRO","DERRICK","ZACHARY","HERMAN","GLEN","HECTOR","RICARDO","RICK","BRENT","RAMON","GILBERT","MARC","REGINALD","RUBEN","NATHANIEL","RAFAEL","EDGAR","MILTON","RAUL","BEN","CHESTER","DUANE","FRANKLIN","BRAD","RON","ROLAND","ARNOLD","HARVEY","JARED","ERIK","DARRYL","NEIL","JAVIER","FERNANDO","CLINTON","TED","MATHEW","TYRONE","DARREN","LANCE","KURT","ALLAN","NELSON","GUY","CLAYTON","HUGH","MAX","DWAYNE","DWIGHT","ARMANDO","FELIX","EVERETT","IAN","WALLACE","KEN","BOB","ALFREDO","ALBERTO","DAVE","IVAN","BYRON","ISAAC","MORRIS","CLIFTON","WILLARD","ROSS","ANDY","SALVADOR","KIRK","SERGIO","SETH","KENT","TERRANCE","EDUARDO","TERRENCE","ENRIQUE","WADE","STUART","FREDRICK","ARTURO","ALEJANDRO","NICK","LUTHER","WENDELL","JEREMIAH","JULIUS","OTIS","TREVOR","OLIVER","LUKE","HOMER","GERARD","DOUG","KENNY","HUBERT","LYLE","MATT","ALFONSO","ORLANDO","REX","CARLTON","ERNESTO","NEAL","PABLO","LORENZO","OMAR","WILBUR","GRANT","HORACE","RODERICK","ABRAHAM","WILLIS","RICKEY","ANDRES","CESAR","JOHNATHAN","MALCOLM","RUDOLPH","DAMON","KELVIN","PRESTON","ALTON","ARCHIE","MARCO","WM","PETE","RANDOLPH","GARRY","GEOFFREY","JONATHON","FELIPE","GERARDO","ED","DOMINIC","DELBERT","COLIN","GUILLERMO","EARNEST","LUCAS","BENNY","SPENCER","RODOLFO","MYRON","EDMUND","GARRETT","SALVATORE","CEDRIC","LOWELL","GREGG","SHERMAN","WILSON","SYLVESTER","ROOSEVELT","ISRAEL","JERMAINE","FORREST","WILBERT","LELAND","SIMON","CLARK","IRVING","BRYANT","OWEN","RUFUS","WOODROW","KRISTOPHER","MACK","LEVI","MARCOS","GUSTAVO","JAKE","LIONEL","GILBERTO","CLINT","NICOLAS","ISMAEL","ORVILLE","ERVIN","DEWEY","AL","WILFRED","JOSH","HUGO","IGNACIO","CALEB","TOMAS","SHELDON","ERICK","STEWART","DOYLE","DARREL","ROGELIO","TERENCE","SANTIAGO","ALONZO","ELIAS","BERT","ELBERT","RAMIRO","CONRAD","NOAH","GRADY","PHIL","CORNELIUS","LAMAR","ROLANDO","CLAY","PERCY","DEXTER","BRADFORD","DARIN","AMOS","MOSES","IRVIN","SAUL","ROMAN","RANDAL","TIMMY","DARRIN","WINSTON","BRENDAN","ABEL","DOMINICK","BOYD","EMILIO","ELIJAH","DOMINGO","EMMETT","MARLON","EMANUEL","JERALD","EDMOND","EMIL","DEWAYNE","WILL","OTTO","TEDDY","REYNALDO","BRET","JESS","TRENT","HUMBERTO","EMMANUEL","STEPHAN","VICENTE","LAMONT","GARLAND","MILES","EFRAIN","HEATH","RODGER","HARLEY","ETHAN","ELDON","ROCKY","PIERRE","JUNIOR","FREDDY","ELI","BRYCE","ANTOINE","STERLING","CHASE","GROVER","ELTON","CLEVELAND","DYLAN","CHUCK","DAMIAN","REUBEN","STAN","AUGUST","LEONARDO","JASPER","RUSSEL","ERWIN","BENITO","HANS","MONTE","BLAINE","ERNIE","CURT","QUENTIN","AGUSTIN","MURRAY","JAMAL","ADOLFO","HARRISON","TYSON","BURTON","BRADY","ELLIOTT","WILFREDO","BART","JARROD","VANCE","DENIS","DAMIEN","JOAQUIN","HARLAN","DESMOND","ELLIOT","DARWIN","GREGORIO","BUDDY","XAVIER","KERMIT","ROSCOE","ESTEBAN","ANTON","SOLOMON","SCOTTY","NORBERT","ELVIN","WILLIAMS","NOLAN","ROD","QUINTON","HAL","BRAIN","ROB","ELWOOD","KENDRICK","DARIUS","MOISES","FIDEL","THADDEUS","CLIFF","MARCEL","JACKSON","RAPHAEL","BRYON","ARMAND","ALVARO","JEFFRY","DANE","JOESPH","THURMAN","NED","RUSTY","MONTY","FABIAN","REGGIE","MASON","GRAHAM","ISAIAH","VAUGHN","GUS","LOYD","DIEGO","ADOLPH","NORRIS","MILLARD","ROCCO","GONZALO","DERICK","RODRIGO","WILEY","RIGOBERTO","ALPHONSO","TY","NOE","VERN","REED","JEFFERSON","ELVIS","BERNARDO","MAURICIO","HIRAM","DONOVAN","BASIL","RILEY","NICKOLAS","MAYNARD","SCOT","VINCE","QUINCY","EDDY","SEBASTIAN","FEDERICO","ULYSSES","HERIBERTO","DONNELL","COLE","DAVIS","GAVIN","EMERY","WARD","ROMEO","JAYSON","DANTE","CLEMENT","COY","MAXWELL","JARVIS","BRUNO","ISSAC","DUDLEY","BROCK","SANFORD","CARMELO","BARNEY","NESTOR","STEFAN","DONNY","ART","LINWOOD","BEAU","WELDON","GALEN","ISIDRO","TRUMAN","DELMAR","JOHNATHON","SILAS","FREDERIC","DICK","IRWIN","MERLIN","CHARLEY","MARCELINO","HARRIS","CARLO","TRENTON","KURTIS","HUNTER","AURELIO","WINFRED","VITO","COLLIN","DENVER","CARTER","LEONEL","EMORY","PASQUALE","MOHAMMAD","MARIANO","DANIAL","LANDON","DIRK","BRANDEN","ADAN","BUFORD","GERMAN","WILMER","EMERSON","ZACHERY","FLETCHER","JACQUES","ERROL","DALTON","MONROE","JOSUE","EDWARDO","BOOKER","WILFORD","SONNY","SHELTON","CARSON","THERON","RAYMUNDO","DAREN","HOUSTON","ROBBY","LINCOLN","GENARO","BENNETT","OCTAVIO","CORNELL","HUNG","ARRON","ANTONY","HERSCHEL","GIOVANNI","GARTH","CYRUS","CYRIL","RONNY","LON","FREEMAN","DUNCAN","KENNITH","CARMINE","ERICH","CHADWICK","WILBURN","RUSS","REID","MYLES","ANDERSON","MORTON","JONAS","FOREST","MITCHEL","MERVIN","ZANE","RICH","JAMEL","LAZARO","ALPHONSE","RANDELL","MAJOR","JARRETT","BROOKS","ABDUL","LUCIANO","SEYMOUR","EUGENIO","MOHAMMED","VALENTIN","CHANCE","ARNULFO","LUCIEN","FERDINAND","THAD","EZRA","ALDO","RUBIN","ROYAL","MITCH","EARLE","ABE","WYATT","MARQUIS","LANNY","KAREEM","JAMAR","BORIS","ISIAH","EMILE","ELMO","ARON","LEOPOLDO","EVERETTE","JOSEF","ELOY","RODRICK","REINALDO","LUCIO","JERROD","WESTON","HERSHEL","BARTON","PARKER","LEMUEL","BURT","JULES","GIL","ELISEO","AHMAD","NIGEL","EFREN","ANTWAN","ALDEN","MARGARITO","COLEMAN","DINO","OSVALDO","LES","DEANDRE","NORMAND","KIETH","TREY","NORBERTO","NAPOLEON","JEROLD","FRITZ","ROSENDO","MILFORD","CHRISTOPER","ALFONZO","LYMAN","JOSIAH","BRANT","WILTON","RICO","JAMAAL","DEWITT","BRENTON","OLIN","FOSTER","FAUSTINO","CLAUDIO","JUDSON","GINO","EDGARDO","ALEC","TANNER","JARRED","DONN","TAD","PRINCE","PORFIRIO","ODIS","LENARD","CHAUNCEY","TOD","MEL","MARCELO","KORY","AUGUSTUS","KEVEN","HILARIO","BUD","SAL","ORVAL","MAURO","ZACHARIAH","OLEN","ANIBAL","MILO","JED","DILLON","AMADO","NEWTON","LENNY","RICHIE","HORACIO","BRICE","MOHAMED","DELMER","DARIO","REYES","MAC","JONAH","JERROLD","ROBT","HANK","RUPERT","ROLLAND","KENTON","DAMION","ANTONE","WALDO","FREDRIC","BRADLY","KIP","BURL","WALKER","TYREE","JEFFEREY","AHMED","WILLY","STANFORD","OREN","NOBLE","MOSHE","MIKEL","ENOCH","BRENDON","QUINTIN","JAMISON","FLORENCIO","DARRICK","TOBIAS","HASSAN","GIUSEPPE","DEMARCUS","CLETUS","TYRELL","LYNDON","KEENAN","WERNER","GERALDO","COLUMBUS","CHET","BERTRAM","MARKUS","HUEY","HILTON","DWAIN","DONTE","TYRON","OMER","ISAIAS","HIPOLITO","FERMIN","ADALBERTO","BO","BARRETT","TEODORO","MCKINLEY","MAXIMO","GARFIELD","RALEIGH","LAWERENCE","ABRAM","RASHAD","KING","EMMITT","DARON","SAMUAL","MIQUEL","EUSEBIO","DOMENIC","DARRON","BUSTER","WILBER","RENATO","JC","HOYT","HAYWOOD","EZEKIEL","CHAS","FLORENTINO","ELROY","CLEMENTE","ARDEN","NEVILLE","EDISON","DESHAWN","NATHANIAL","JORDON","DANILO","CLAUD","SHERWOOD","RAYMON","RAYFORD","CRISTOBAL","AMBROSE","TITUS","HYMAN","FELTON","EZEQUIEL","ERASMO","STANTON","LONNY","LEN","IKE","MILAN","LINO","JAROD","HERB","ANDREAS","WALTON","RHETT","PALMER","DOUGLASS","CORDELL","OSWALDO","ELLSWORTH","VIRGILIO","TONEY","NATHANAEL","DEL","BENEDICT","MOSE","JOHNSON","ISREAL","GARRET","FAUSTO","ASA","ARLEN","ZACK","WARNER","MODESTO","FRANCESCO","MANUAL","GAYLORD","GASTON","FILIBERTO","DEANGELO","MICHALE","GRANVILLE","WES","MALIK","ZACKARY","TUAN","ELDRIDGE","CRISTOPHER","CORTEZ","ANTIONE","MALCOM","LONG","KOREY","JOSPEH","COLTON","WAYLON","VON","HOSEA","SHAD","SANTO","RUDOLF","ROLF","REY","RENALDO","MARCELLUS","LUCIUS","KRISTOFER","BOYCE","BENTON","HAYDEN","HARLAND","ARNOLDO","RUEBEN","LEANDRO","KRAIG","JERRELL","JEROMY","HOBERT","CEDRICK","ARLIE","WINFORD","WALLY","LUIGI","KENETH","JACINTO","GRAIG","FRANKLYN","EDMUNDO","SID","PORTER","LEIF","JERAMY","BUCK","WILLIAN","VINCENZO","SHON","LYNWOOD","JERE","HAI","ELDEN","DORSEY","DARELL","BRODERICK","ALONSO" \ No newline at end of file diff --git a/problems/p22/src/main.rs b/problems/p22/src/main.rs new file mode 100644 index 0000000..b555aa5 --- /dev/null +++ b/problems/p22/src/main.rs @@ -0,0 +1,23 @@ +use std::fs::File; +use std::io::{BufRead, BufReader}; + +fn main() -> Result<(), Box> { + let file = File::open("problems/p22/p022_names.txt")?; + let mut reader = BufReader::new(file); + let mut line = String::new(); + reader.read_line(&mut line)?; + let cleaned_line = line.replace("\"", ""); + let mut names: Vec<&str> = cleaned_line.split(',').collect(); + names.sort(); + let mut sum = 0; + for (idx, name) in names.iter().enumerate() { + let alpha_score: u32 = name + .chars() + .filter(|c| c.is_ascii_alphabetic()) + .map(|c| c.to_ascii_lowercase() as u32 - 96) + .sum(); + sum += alpha_score * (idx as u32 + 1); + } + println!("{sum}"); + Ok(()) +} diff --git a/problems/p23/Cargo.toml b/problems/p23/Cargo.toml new file mode 100644 index 0000000..08e01c9 --- /dev/null +++ b/problems/p23/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p23" +version = "0.1.0" +edition = "2024" + +[dependencies] +rayon = "1.11.0" diff --git a/problems/p23/src/main.rs b/problems/p23/src/main.rs new file mode 100644 index 0000000..a490f92 --- /dev/null +++ b/problems/p23/src/main.rs @@ -0,0 +1,61 @@ +// 小于28123的数分为可用两盈数和表示和不可表示。 +// 计算范围在0,28123 +// 找出范围内的盈数,两两加和 +// 去除范围内的加和数,对剩余数求和 +use rayon::prelude::*; + +fn get_proper_divisors(num: u32) -> Vec { + if num <= 1 { + return Vec::new(); + } + + let mut divisors = Vec::new(); + for i in 1..=((num as f64).sqrt() as u32) { + if num % i == 0 { + divisors.push(i); + if i != num / i && i != 1 { + // 避免重复,且不包含1的平方根情况 + divisors.push(num / i); + } + } + } + + // 移除数字本身,只保留真因数 + divisors.retain(|&x| x < num); + divisors.sort(); + divisors +} +#[test] +fn test_get_proper_divisors() { + assert_eq!(vec![1, 2, 4, 7, 14], get_proper_divisors(28)); +} + +fn is_abundant(num: u32) -> bool { + let proper_sum: u32 = get_proper_divisors(num).iter().sum(); + proper_sum > num +} +#[test] +fn test_is_abundant() { + assert!(is_abundant(12)); + assert!(!is_abundant(4)); +} + +fn main() { + let all_abundant: Vec = (12..28123) + .into_par_iter() + .filter(|&x| is_abundant(x)) + .collect(); + + let mut all_abundant_pair_sum = Vec::new(); + for (k, adder1) in all_abundant.iter().enumerate() { + for adder2 in &all_abundant[k..] { + all_abundant_pair_sum.push(adder1 + adder2); + } + } + + let result = (1..28123) + .into_par_iter() + .filter(|x| !all_abundant_pair_sum.contains(x)) + .sum::(); + println!("{result}"); +} diff --git a/problems/p24/Cargo.toml b/problems/p24/Cargo.toml new file mode 100644 index 0000000..10ab5d4 --- /dev/null +++ b/problems/p24/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p24" +version = "0.1.0" +edition = "2024" + +[dependencies] +itertools = { workspace = true } diff --git a/problems/p24/src/main.rs b/problems/p24/src/main.rs new file mode 100644 index 0000000..ba2c9f4 --- /dev/null +++ b/problems/p24/src/main.rs @@ -0,0 +1,18 @@ +use itertools::Itertools; + +fn get_n(elements: Vec, n: usize) -> String { + elements + .iter() + .permutations(elements.len()) + .nth(n) + .unwrap() + .iter() + .map(|s| s.as_str()) + .collect::() +} + +fn main() { + let elements = (0..=9).map(|x| x.to_string()).collect::>(); + let result = get_n(elements, 1000000 - 1); + println!("{result}"); +} diff --git a/problems/p25/Cargo.toml b/problems/p25/Cargo.toml new file mode 100644 index 0000000..9b7c645 --- /dev/null +++ b/problems/p25/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p25" +version = "0.1.0" +edition = "2024" + +[dependencies] +num-bigint = "0.4.6" diff --git a/problems/p25/src/main.rs b/problems/p25/src/main.rs new file mode 100644 index 0000000..6540c92 --- /dev/null +++ b/problems/p25/src/main.rs @@ -0,0 +1,48 @@ +use num_bigint::BigUint; +use std::collections::HashMap; + +struct FibCal { + cache: HashMap, +} + +impl FibCal { + fn new() -> Self { + let mut cache = HashMap::new(); + cache.insert(0, BigUint::from(0u32)); + cache.insert(1, BigUint::from(1u32)); + Self { cache } + } + + fn fib(&mut self, n: u64) -> BigUint { + if let Some(cached) = self.cache.get(&n) { + return cached.clone(); + } + let result = self.fib(n - 1) + self.fib(n - 2); + self.cache.insert(n, result.clone()); + result + } +} + +#[test] +fn test_fib() { + let mut fib_cal = FibCal::new(); + + assert_eq!(fib_cal.fib(0), BigUint::from(0u32)); // F(0) = 0 + assert_eq!(fib_cal.fib(1), BigUint::from(1u32)); // F(1) = 1 + assert_eq!(fib_cal.fib(2), BigUint::from(1u32)); // F(2) = 1 + assert_eq!(fib_cal.fib(3), BigUint::from(2u32)); // F(3) = 2 + assert_eq!(fib_cal.fib(4), BigUint::from(3u32)); // F(4) = 3 +} + +fn main() { + let mut term = 1u64; + let mut fib_cal = FibCal::new(); + loop { + let result = fib_cal.fib(term); + if result.to_string().len() >= 1000 { + break; + } + term += 1; + } + println!("{term}"); +} diff --git a/problems/p26/Cargo.toml b/problems/p26/Cargo.toml new file mode 100644 index 0000000..d25448d --- /dev/null +++ b/problems/p26/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p26" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p26/src/main.rs b/problems/p26/src/main.rs new file mode 100644 index 0000000..b01e698 --- /dev/null +++ b/problems/p26/src/main.rs @@ -0,0 +1,66 @@ +// 分数分为有限小数与无限循环小数 +// +// 除数不变,当被除数出现相同时,出现循环 +use std::collections::HashSet; + +fn div_to_vec(denominator: u32) -> Vec { + let mut remainder_set: HashSet = HashSet::new(); + let deno_digits = denominator.to_string().len() as u32; + let mut remainder = 10u32.pow(deno_digits); + remainder_set.insert(1); + + let mut xiaoshu = Vec::new(); + let mut divider = remainder / denominator; + xiaoshu.push(divider); + remainder %= denominator; + remainder_set.insert(remainder); + while remainder != 0 { + remainder *= 10u32.pow(deno_digits); + divider = remainder / denominator; + xiaoshu.push(divider); + remainder %= denominator; + if remainder_set.contains(&remainder) { + remainder *= 10u32.pow(deno_digits); + divider = remainder / denominator; + xiaoshu.push(divider); + break; + } + remainder_set.insert(remainder); + } + xiaoshu +} +#[test] +fn test_div_to_vec() { + assert_eq!(div_to_vec(2), vec![5]); + assert_eq!(div_to_vec(4), vec![2, 5]); + assert_eq!(div_to_vec(5), vec![2]); +} + +fn get_recurring_cycles(denominator: u32) -> u32 { + let xiaoshu = div_to_vec(denominator); + let last_element = xiaoshu[xiaoshu.len() - 1]; + let first_idx = xiaoshu.iter().position(|x| x == &last_element).unwrap(); + let result = xiaoshu.len() - 1 - first_idx; + result as u32 +} +#[test] +fn test_get_recurring_cycles() { + assert_eq!(get_recurring_cycles(6), 1); + assert_eq!(get_recurring_cycles(7), 6); + assert_ne!(get_recurring_cycles(9), 1); + assert_eq!(get_recurring_cycles(11), 2); + assert_eq!(get_recurring_cycles(12), 1); +} + +fn main() { + let mut longest_cycles = 0; + for denominator in 1..1000 { + let cycles = get_recurring_cycles(denominator); + if cycles > longest_cycles { + longest_cycles = cycles; + } + } + + println!("longest_cycles: {longest_cycles}"); + // FIX: answer incorrect +} diff --git a/problems/p27/Cargo.toml b/problems/p27/Cargo.toml new file mode 100644 index 0000000..b7fc8e5 --- /dev/null +++ b/problems/p27/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p27" +version = "0.1.0" +edition = "2024" + +[dependencies] +primal = "0.3" diff --git a/problems/p27/src/main.rs b/problems/p27/src/main.rs new file mode 100644 index 0000000..cf7862d --- /dev/null +++ b/problems/p27/src/main.rs @@ -0,0 +1,37 @@ +use primal::is_prime; + +fn gen_prime_count(a: i32, b: i32) -> i32 { + let mut count = 0i32; + + let mut result = count * count + a * count + b; + if result <= 0 { + return count; + } + + while is_prime(result as u64) { + count += 1; + result = count * count + a * count + b; + } + + count +} +#[test] +fn test_gen_prime_count() { + assert_eq!(gen_prime_count(1, 41), 40); + assert_eq!(gen_prime_count(-79, 1601), 80); +} + +fn main() { + let mut max_len = 0; + let mut max_product = 0; + for a in -1000..1000 { + for b in -1000..1000 { + let len = gen_prime_count(a, b); + if len > max_len { + max_len = len; + max_product = a * b; + } + } + } + println!("{max_product}"); +} diff --git a/problems/p28/Cargo.toml b/problems/p28/Cargo.toml new file mode 100644 index 0000000..fa44483 --- /dev/null +++ b/problems/p28/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p28" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p28/src/main.rs b/problems/p28/src/main.rs new file mode 100644 index 0000000..ef8fbff --- /dev/null +++ b/problems/p28/src/main.rs @@ -0,0 +1,16 @@ +// 1, 3, 5, 7, 9, 13, 17, 21, 25, 31 +//+2,+2,+2,+2,+4,+4,+4,+4, +6 +// +//右上角固定为平方数,nxn + +fn main() { + let mut sum = 1; + + let n = 1001; + for round in 1..=(n / 2) { + let base = (round * 2 + 1) * (round * 2 + 1); + sum += base * 4; + sum -= round * 2 * 6; + } + println!("{sum}"); +} diff --git a/problems/p29/Cargo.toml b/problems/p29/Cargo.toml new file mode 100644 index 0000000..2f7d2ae --- /dev/null +++ b/problems/p29/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p29" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p29/src/main.rs b/problems/p29/src/main.rs new file mode 100644 index 0000000..981f8f7 --- /dev/null +++ b/problems/p29/src/main.rs @@ -0,0 +1,12 @@ +use std::collections::HashSet; + +fn main() { + let mut result: HashSet = HashSet::new(); + for a in 2..=100u32 { + for b in 2..=100u32 { + result.insert(a.pow(b)); + } + } + todo!(); + println!("{}", result.len()); +} diff --git a/problems/p3/Cargo.toml b/problems/p3/Cargo.toml new file mode 100644 index 0000000..6a8a5cd --- /dev/null +++ b/problems/p3/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p3" +version = "0.1.0" +edition = "2024" + +[dependencies] +primal = "0.3.3" diff --git a/problems/p3/src/main.rs b/problems/p3/src/main.rs new file mode 100644 index 0000000..a38c2f9 --- /dev/null +++ b/problems/p3/src/main.rs @@ -0,0 +1,12 @@ +use primal::Sieve; + +fn largest_prime_factor(input: u64) -> u64 { + let sieve = Sieve::new(1_000_000); + let factors = sieve.factor(input as usize).unwrap(); + + factors.last().unwrap().0 as u64 +} + +fn main() { + println!("{}", largest_prime_factor(600851475143)); +} diff --git a/problems/p30/Cargo.toml b/problems/p30/Cargo.toml new file mode 100644 index 0000000..50d9e06 --- /dev/null +++ b/problems/p30/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p30" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p30/src/main.rs b/problems/p30/src/main.rs new file mode 100644 index 0000000..cad6ba8 --- /dev/null +++ b/problems/p30/src/main.rs @@ -0,0 +1,26 @@ +// >>> 9**5*6 +// 354294 +// >>> 9**5*7 +// 413343 +// +// 推测n < 999999 + +fn is_fifth_power_sum(num: u32) -> bool { + let mut digits: Vec = Vec::new(); + let mut a = num / 10; + let mut b = num % 10; + while a != 0 { + digits.push(b); + b = a % 10; + a /= 10; + } + digits.push(b); + + let sum: u32 = digits.iter().map(|x| x.pow(5)).sum(); + sum == num +} + +fn main() { + let sum_of_is_sum: u32 = (2..999999).filter(|n| is_fifth_power_sum(*n)).sum(); + println!("{sum_of_is_sum}"); +} diff --git a/problems/p31/Cargo.toml b/problems/p31/Cargo.toml new file mode 100644 index 0000000..bff5831 --- /dev/null +++ b/problems/p31/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p31" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p31/src/main.rs b/problems/p31/src/main.rs new file mode 100644 index 0000000..2da063d --- /dev/null +++ b/problems/p31/src/main.rs @@ -0,0 +1,4 @@ +fn main() { + println!("Hello, world!"); + todo!() +} diff --git a/problems/p32/Cargo.toml b/problems/p32/Cargo.toml new file mode 100644 index 0000000..6ecb5cc --- /dev/null +++ b/problems/p32/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p32" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p32/src/main.rs b/problems/p32/src/main.rs new file mode 100644 index 0000000..2da063d --- /dev/null +++ b/problems/p32/src/main.rs @@ -0,0 +1,4 @@ +fn main() { + println!("Hello, world!"); + todo!() +} diff --git a/problems/p33/Cargo.toml b/problems/p33/Cargo.toml new file mode 100644 index 0000000..4d45300 --- /dev/null +++ b/problems/p33/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p33" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p33/src/main.rs b/problems/p33/src/main.rs new file mode 100644 index 0000000..8b912ba --- /dev/null +++ b/problems/p33/src/main.rs @@ -0,0 +1,33 @@ +fn is_non_trivial_fraction(up: u32, down: u32) -> bool { + if !(10..100).contains(&up) { + return false; + } + if !(10..100).contains(&down) { + return false; + } + if up >= down { + return false; + } + let up_1 = up % 10; + let up_10 = up / 10; + let down_1 = down % 10; + let down_10 = down / 10; + + // 两个个位相同不可能化简 + if up_1 == down_1 { + return false; + } + + todo!(); + + true +} +#[test] +fn test_is_non_trivial_fraction() { + assert!(is_non_trivial_fraction(49, 98)); + assert!(!is_non_trivial_fraction(49, 99)); +} + +fn main() { + println!("Hello, world!"); +} diff --git a/problems/p34/Cargo.toml b/problems/p34/Cargo.toml new file mode 100644 index 0000000..d3f69cc --- /dev/null +++ b/problems/p34/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p34" +version = "0.1.0" +edition = "2024" + +[dependencies] +rayon = "1.11.0" diff --git a/problems/p34/src/main.rs b/problems/p34/src/main.rs new file mode 100644 index 0000000..393aed0 --- /dev/null +++ b/problems/p34/src/main.rs @@ -0,0 +1,30 @@ +use rayon::prelude::*; + +fn is_fact_sum(num: u32) -> bool { + let factorials = [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]; + let mut digits = Vec::new(); + let mut a = num % 10; + let mut b = num / 10; + digits.push(a); + while b != 0 { + a = b % 10; + b /= 10; + digits.push(a); + } + let fact_sum: u32 = digits.iter().map(|&x| factorials[x as usize]).sum(); + fact_sum == num +} +#[test] +fn test_is_fact_sum() { + assert!(is_fact_sum(145)); + assert!(!is_fact_sum(146)); +} + +fn main() { + // 小于7位 + let sum: u32 = (3..9999999) + .into_par_iter() + .filter(|&x| is_fact_sum(x)) + .sum(); + println!("{sum}"); +} diff --git a/problems/p35/Cargo.toml b/problems/p35/Cargo.toml new file mode 100644 index 0000000..24a7b2b --- /dev/null +++ b/problems/p35/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p35" +version = "0.1.0" +edition = "2024" + +[dependencies] +primal = "0.3.3" diff --git a/problems/p35/src/main.rs b/problems/p35/src/main.rs new file mode 100644 index 0000000..b629733 --- /dev/null +++ b/problems/p35/src/main.rs @@ -0,0 +1,43 @@ +use std::str::FromStr; + +use primal::is_prime; + +// 有0,2, 4, 5, 6, 8的,必然不是 +fn is_circular_prime(num: u32) -> bool { + if num == 2 || num == 3 || num == 5 || num == 7 { + return true; + } + let mut str_num = num.to_string(); + if str_num.contains("0") + || str_num.contains("2") + || str_num.contains("4") + || str_num.contains("5") + || str_num.contains("6") + || str_num.contains("8") + { + return false; + } + + for _ in 0..str_num.len() { + let num = u32::from_str(&str_num).unwrap(); + if !is_prime(num as u64) { + return false; + } + str_num = str_num[1..str_num.len()].to_string() + &str_num[0..1]; + } + + true +} +#[test] +fn test_is_circular_prime() { + assert!(is_circular_prime(2)); + assert!(is_circular_prime(5)); + assert!(is_circular_prime(13)); + assert!(!is_circular_prime(4)); + assert!(is_circular_prime(197)); +} + +fn main() { + let count = (0..1000000u32).filter(|x| is_circular_prime(*x)).count(); + println!("{count}"); +} diff --git a/problems/p36/Cargo.toml b/problems/p36/Cargo.toml new file mode 100644 index 0000000..ea8afbd --- /dev/null +++ b/problems/p36/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p36" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p36/src/main.rs b/problems/p36/src/main.rs new file mode 100644 index 0000000..04bdef3 --- /dev/null +++ b/problems/p36/src/main.rs @@ -0,0 +1,28 @@ +fn is_palindromic_base10(n: u32) -> bool { + let string = n.to_string(); + string == string.chars().rev().collect::() +} +#[test] +fn test_is_palindromic_base10() { + assert!(is_palindromic_base10(585)); +} + +fn is_palindromic_base2(n: u32) -> bool { + if n.is_multiple_of(2) { + return false; + } + let string = format!("{:b}", n); + string == string.chars().rev().collect::() +} +#[test] +fn test_is_palindromic_base2() { + assert!(is_palindromic_base2(585)); +} + +fn main() { + let sum = (0..100_0000u32) + .filter(|&x| is_palindromic_base10(x)) + .filter(|&x| is_palindromic_base2(x)) + .sum::(); + println!("sum: {sum}"); +} diff --git a/problems/p37/Cargo.toml b/problems/p37/Cargo.toml new file mode 100644 index 0000000..90bd3b6 --- /dev/null +++ b/problems/p37/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p37" +version = "0.1.0" +edition = "2024" + +[dependencies] +primal = { workspace = true } diff --git a/problems/p37/src/main.rs b/problems/p37/src/main.rs new file mode 100644 index 0000000..b8d5b43 --- /dev/null +++ b/problems/p37/src/main.rs @@ -0,0 +1,68 @@ +use primal::{self, Primes, is_prime}; + +fn is_truncatable_primes(n: u32) -> bool { + match n { + 2 => false, + 3 => false, + 5 => false, + 7 => false, + _ => is_right_truncatable_primes(n) && is_left_truncatable_primes(n), + } +} +#[test] +fn test_is_truncatable_primes() { + assert!(is_truncatable_primes(3797)); +} +fn is_left_truncatable_primes(n: u32) -> bool { + let mut n = n; + while n > 0 { + if is_prime(n as u64) { + n /= 10; + } else { + return false; + } + } + true +} +#[test] +fn test_is_left_truncatable_primes() { + assert!(is_left_truncatable_primes(3797)); +} + +fn is_right_truncatable_primes(n: u32) -> bool { + let mut n = n; + while n > 0 { + if is_prime(n as u64) { + let string = &n.to_string()[1..]; + + n = match string.len() { + 0 => { + return true; + } + _ => string.parse().unwrap(), + } + } else { + return false; + } + } + true +} +#[test] +fn test_is_right_truncatable_primes() { + assert!(is_right_truncatable_primes(3797)); +} + +fn main() { + let mut p_vec = Vec::new(); + for prime in Primes::all() { + if is_truncatable_primes(prime as u32) { + p_vec.push(prime as u32); + } + if p_vec.len() == 11 { + break; + } + } + let sum = p_vec.iter().sum::(); + dbg!(p_vec); + println!("sum: {sum}"); +} diff --git a/problems/p38/Cargo.toml b/problems/p38/Cargo.toml new file mode 100644 index 0000000..9e91a3b --- /dev/null +++ b/problems/p38/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p38" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p38/src/main.rs b/problems/p38/src/main.rs new file mode 100644 index 0000000..6bf423a --- /dev/null +++ b/problems/p38/src/main.rs @@ -0,0 +1,18 @@ +// 全数字的倍数 +// 将$192$分别与$1$、$2$、$3$相乘: +// +// $192 × 1 = 192$ +// +// $192 × 2 = 384$ +// +// $192 × 3 = 576$ +// +// 将这些乘积拼接起来,可以得到一个$1$至$9$全数字的数$192384576$,因此称$192384576$为$192$和$(1,2,3)$的拼接乘积。 +// +// 类似地,将$9$分别与$1$、$2$、$3$、$4$、$5$相乘,可以得到$1$至$9$全数字的数$918273645$,并称之为$9$和$(1,2,3,4,5)$的拼接乘积。 +// +// 考虑所有$n>1$时某个整数和$(1,2, … ,n)$的拼接乘积,其中最大的$1$至$9$全数字的数是多少? + +fn main() { + // 987654321 * 1 +} diff --git a/problems/p39/Cargo.toml b/problems/p39/Cargo.toml new file mode 100644 index 0000000..a636cc2 --- /dev/null +++ b/problems/p39/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p39" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p39/src/main.rs b/problems/p39/src/main.rs new file mode 100644 index 0000000..ac11f46 --- /dev/null +++ b/problems/p39/src/main.rs @@ -0,0 +1,54 @@ +// 整数边长直角三角形 +// 考虑三边长$\{a,b,c\}$均为整数的直角三角形,并记其周长为$p$,当$p = 120$时,恰好存在三个不同的解: +// +// $$\{20,48,52\}, \{24,45,51\}, \{30,40,50\}$$ +// +// 在所有的$p \le 1000$中,$p$取何值时有最多个解? + +// 直角三角形有勾股定理 +// 可转换为方程的整数解 +// c^2 = a^2 + b^2 +// a + b + c = p +// a, b, c 属于 Z +// a + b > c +// a + c > b +// b + c > a +// +// 带入,2c < p +// c < p / 2 +// c > p / 3 +// 遍历c ,分解c^2 = a^2 + b^2 +// 分解可使用暴力法或Cornacchia算法 +// 这里数字较小,可以使用暴力法 + +fn two_square(c_pow2: u32) -> Option<(u32, u32)> { + if c_pow2 % 4 == 3 { + return None; + } + for a in (1..c_pow2.isqrt()).rev() { + let b = (c_pow2 - a * a).isqrt(); + if b * b + a * a == c_pow2 { + return Some((a, b)); + } + } + None +} + +fn main() { + let mut solve_counter = vec![0; 1000]; + for p in 5..1000 { + for c in p / 3..p / 2 { + match two_square(c * c) { + Some(_) => solve_counter[p as usize] += 1, + None => continue, + } + } + } + let max_index = solve_counter + .iter() + .enumerate() + .max_by_key(|&(_, value)| value) + .unwrap() + .0; + println!("{max_index}"); +} diff --git a/problems/p4/Cargo.toml b/problems/p4/Cargo.toml new file mode 100644 index 0000000..ae9877e --- /dev/null +++ b/problems/p4/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p4" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p4/src/main.rs b/problems/p4/src/main.rs new file mode 100644 index 0000000..1f0dcc9 --- /dev/null +++ b/problems/p4/src/main.rs @@ -0,0 +1,41 @@ +fn is_palindrome(input: usize) -> bool { + if input != 0 && input % 10 == 0 { + return false; + } + + let mut original = input; + let mut reversed = 0; + + // 只反转数字的后半部分 + while original > reversed { + reversed = reversed * 10 + original % 10; + original /= 10; + } + + // 对于偶数位数字,如original==reversed + // 对于奇数位数字,如original==reversed/10(去掉中间的数字) + original == reversed || original == reversed / 10 +} + +fn main() { + let numbers: Vec = (100..=999).collect(); + + // 所有符合条件的组合(前面的数字大于后面的数字) + let descending_pairs: Vec<(i32, i32)> = numbers + .iter() + .flat_map(|&i| { + numbers + .iter() + .filter(move |&&j| i > j) // 确保i > j(前面大于后面) + .map(move |&j| (i, j)) + }) + .collect(); + let mut result = 0; + for (i, j) in descending_pairs { + let number = i * j; + if is_palindrome(number as usize) && number > result { + result = number; + } + } + println!("{result}"); +} diff --git a/problems/p40/Cargo.toml b/problems/p40/Cargo.toml new file mode 100644 index 0000000..55855bb --- /dev/null +++ b/problems/p40/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p40" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p40/src/main.rs b/problems/p40/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/problems/p40/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/problems/p41/Cargo.toml b/problems/p41/Cargo.toml new file mode 100644 index 0000000..b7cc4b4 --- /dev/null +++ b/problems/p41/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "p41" +version = "0.1.0" +edition = "2024" + +[dependencies] +primal = { workspace = true } +itertools = { workspace = true } diff --git a/problems/p41/src/main.rs b/problems/p41/src/main.rs new file mode 100644 index 0000000..6f6e2d8 --- /dev/null +++ b/problems/p41/src/main.rs @@ -0,0 +1,44 @@ +// 全数字素数 +// 如果一个$n$位数恰好使用了$1$至$n$每个数字各一次, +// 则称为全数字数。例如,$2143$就是一个$4$位全数字数, +// 同时它也是一个素数。 +// +// 最大的全数字素数是多少? + +// 当n=1时,只有1 +// 当n=2时,12和21都不是 +// 当n>2时,2不在最后一位。 +// 当1+...+n 可以被3整除时,一定不是 +// 素数判定就用isprime函数 +// 应该从大往小排序 + +use itertools::Itertools; +use primal::{self, is_prime}; + +fn digits_to_u32(digits: &[u8]) -> u32 { + let mut result = 0u32; + for &digit in digits { + result += digit as u32; + result *= 10; + } + result /= 10; + result +} + +fn main() { + let num = [7, 6, 5, 4, 3, 2, 1]; + let a = num + .iter() + .permutations(num.len()) + .map(|x| { + let copied: Vec = x.iter().map(|&&d| d).collect(); + digits_to_u32(&copied) + }) + .collect::>(); + for i in a { + if is_prime(i as u64) { + println!("{i}"); + break; + } + } +} diff --git a/problems/p42/Cargo.toml b/problems/p42/Cargo.toml new file mode 100644 index 0000000..64da5be --- /dev/null +++ b/problems/p42/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p42" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p42/p042_words.txt b/problems/p42/p042_words.txt new file mode 100644 index 0000000..7177624 --- /dev/null +++ b/problems/p42/p042_words.txt @@ -0,0 +1 @@ +"A","ABILITY","ABLE","ABOUT","ABOVE","ABSENCE","ABSOLUTELY","ACADEMIC","ACCEPT","ACCESS","ACCIDENT","ACCOMPANY","ACCORDING","ACCOUNT","ACHIEVE","ACHIEVEMENT","ACID","ACQUIRE","ACROSS","ACT","ACTION","ACTIVE","ACTIVITY","ACTUAL","ACTUALLY","ADD","ADDITION","ADDITIONAL","ADDRESS","ADMINISTRATION","ADMIT","ADOPT","ADULT","ADVANCE","ADVANTAGE","ADVICE","ADVISE","AFFAIR","AFFECT","AFFORD","AFRAID","AFTER","AFTERNOON","AFTERWARDS","AGAIN","AGAINST","AGE","AGENCY","AGENT","AGO","AGREE","AGREEMENT","AHEAD","AID","AIM","AIR","AIRCRAFT","ALL","ALLOW","ALMOST","ALONE","ALONG","ALREADY","ALRIGHT","ALSO","ALTERNATIVE","ALTHOUGH","ALWAYS","AMONG","AMONGST","AMOUNT","AN","ANALYSIS","ANCIENT","AND","ANIMAL","ANNOUNCE","ANNUAL","ANOTHER","ANSWER","ANY","ANYBODY","ANYONE","ANYTHING","ANYWAY","APART","APPARENT","APPARENTLY","APPEAL","APPEAR","APPEARANCE","APPLICATION","APPLY","APPOINT","APPOINTMENT","APPROACH","APPROPRIATE","APPROVE","AREA","ARGUE","ARGUMENT","ARISE","ARM","ARMY","AROUND","ARRANGE","ARRANGEMENT","ARRIVE","ART","ARTICLE","ARTIST","AS","ASK","ASPECT","ASSEMBLY","ASSESS","ASSESSMENT","ASSET","ASSOCIATE","ASSOCIATION","ASSUME","ASSUMPTION","AT","ATMOSPHERE","ATTACH","ATTACK","ATTEMPT","ATTEND","ATTENTION","ATTITUDE","ATTRACT","ATTRACTIVE","AUDIENCE","AUTHOR","AUTHORITY","AVAILABLE","AVERAGE","AVOID","AWARD","AWARE","AWAY","AYE","BABY","BACK","BACKGROUND","BAD","BAG","BALANCE","BALL","BAND","BANK","BAR","BASE","BASIC","BASIS","BATTLE","BE","BEAR","BEAT","BEAUTIFUL","BECAUSE","BECOME","BED","BEDROOM","BEFORE","BEGIN","BEGINNING","BEHAVIOUR","BEHIND","BELIEF","BELIEVE","BELONG","BELOW","BENEATH","BENEFIT","BESIDE","BEST","BETTER","BETWEEN","BEYOND","BIG","BILL","BIND","BIRD","BIRTH","BIT","BLACK","BLOCK","BLOOD","BLOODY","BLOW","BLUE","BOARD","BOAT","BODY","BONE","BOOK","BORDER","BOTH","BOTTLE","BOTTOM","BOX","BOY","BRAIN","BRANCH","BREAK","BREATH","BRIDGE","BRIEF","BRIGHT","BRING","BROAD","BROTHER","BUDGET","BUILD","BUILDING","BURN","BUS","BUSINESS","BUSY","BUT","BUY","BY","CABINET","CALL","CAMPAIGN","CAN","CANDIDATE","CAPABLE","CAPACITY","CAPITAL","CAR","CARD","CARE","CAREER","CAREFUL","CAREFULLY","CARRY","CASE","CASH","CAT","CATCH","CATEGORY","CAUSE","CELL","CENTRAL","CENTRE","CENTURY","CERTAIN","CERTAINLY","CHAIN","CHAIR","CHAIRMAN","CHALLENGE","CHANCE","CHANGE","CHANNEL","CHAPTER","CHARACTER","CHARACTERISTIC","CHARGE","CHEAP","CHECK","CHEMICAL","CHIEF","CHILD","CHOICE","CHOOSE","CHURCH","CIRCLE","CIRCUMSTANCE","CITIZEN","CITY","CIVIL","CLAIM","CLASS","CLEAN","CLEAR","CLEARLY","CLIENT","CLIMB","CLOSE","CLOSELY","CLOTHES","CLUB","COAL","CODE","COFFEE","COLD","COLLEAGUE","COLLECT","COLLECTION","COLLEGE","COLOUR","COMBINATION","COMBINE","COME","COMMENT","COMMERCIAL","COMMISSION","COMMIT","COMMITMENT","COMMITTEE","COMMON","COMMUNICATION","COMMUNITY","COMPANY","COMPARE","COMPARISON","COMPETITION","COMPLETE","COMPLETELY","COMPLEX","COMPONENT","COMPUTER","CONCENTRATE","CONCENTRATION","CONCEPT","CONCERN","CONCERNED","CONCLUDE","CONCLUSION","CONDITION","CONDUCT","CONFERENCE","CONFIDENCE","CONFIRM","CONFLICT","CONGRESS","CONNECT","CONNECTION","CONSEQUENCE","CONSERVATIVE","CONSIDER","CONSIDERABLE","CONSIDERATION","CONSIST","CONSTANT","CONSTRUCTION","CONSUMER","CONTACT","CONTAIN","CONTENT","CONTEXT","CONTINUE","CONTRACT","CONTRAST","CONTRIBUTE","CONTRIBUTION","CONTROL","CONVENTION","CONVERSATION","COPY","CORNER","CORPORATE","CORRECT","COS","COST","COULD","COUNCIL","COUNT","COUNTRY","COUNTY","COUPLE","COURSE","COURT","COVER","CREATE","CREATION","CREDIT","CRIME","CRIMINAL","CRISIS","CRITERION","CRITICAL","CRITICISM","CROSS","CROWD","CRY","CULTURAL","CULTURE","CUP","CURRENT","CURRENTLY","CURRICULUM","CUSTOMER","CUT","DAMAGE","DANGER","DANGEROUS","DARK","DATA","DATE","DAUGHTER","DAY","DEAD","DEAL","DEATH","DEBATE","DEBT","DECADE","DECIDE","DECISION","DECLARE","DEEP","DEFENCE","DEFENDANT","DEFINE","DEFINITION","DEGREE","DELIVER","DEMAND","DEMOCRATIC","DEMONSTRATE","DENY","DEPARTMENT","DEPEND","DEPUTY","DERIVE","DESCRIBE","DESCRIPTION","DESIGN","DESIRE","DESK","DESPITE","DESTROY","DETAIL","DETAILED","DETERMINE","DEVELOP","DEVELOPMENT","DEVICE","DIE","DIFFERENCE","DIFFERENT","DIFFICULT","DIFFICULTY","DINNER","DIRECT","DIRECTION","DIRECTLY","DIRECTOR","DISAPPEAR","DISCIPLINE","DISCOVER","DISCUSS","DISCUSSION","DISEASE","DISPLAY","DISTANCE","DISTINCTION","DISTRIBUTION","DISTRICT","DIVIDE","DIVISION","DO","DOCTOR","DOCUMENT","DOG","DOMESTIC","DOOR","DOUBLE","DOUBT","DOWN","DRAW","DRAWING","DREAM","DRESS","DRINK","DRIVE","DRIVER","DROP","DRUG","DRY","DUE","DURING","DUTY","EACH","EAR","EARLY","EARN","EARTH","EASILY","EAST","EASY","EAT","ECONOMIC","ECONOMY","EDGE","EDITOR","EDUCATION","EDUCATIONAL","EFFECT","EFFECTIVE","EFFECTIVELY","EFFORT","EGG","EITHER","ELDERLY","ELECTION","ELEMENT","ELSE","ELSEWHERE","EMERGE","EMPHASIS","EMPLOY","EMPLOYEE","EMPLOYER","EMPLOYMENT","EMPTY","ENABLE","ENCOURAGE","END","ENEMY","ENERGY","ENGINE","ENGINEERING","ENJOY","ENOUGH","ENSURE","ENTER","ENTERPRISE","ENTIRE","ENTIRELY","ENTITLE","ENTRY","ENVIRONMENT","ENVIRONMENTAL","EQUAL","EQUALLY","EQUIPMENT","ERROR","ESCAPE","ESPECIALLY","ESSENTIAL","ESTABLISH","ESTABLISHMENT","ESTATE","ESTIMATE","EVEN","EVENING","EVENT","EVENTUALLY","EVER","EVERY","EVERYBODY","EVERYONE","EVERYTHING","EVIDENCE","EXACTLY","EXAMINATION","EXAMINE","EXAMPLE","EXCELLENT","EXCEPT","EXCHANGE","EXECUTIVE","EXERCISE","EXHIBITION","EXIST","EXISTENCE","EXISTING","EXPECT","EXPECTATION","EXPENDITURE","EXPENSE","EXPENSIVE","EXPERIENCE","EXPERIMENT","EXPERT","EXPLAIN","EXPLANATION","EXPLORE","EXPRESS","EXPRESSION","EXTEND","EXTENT","EXTERNAL","EXTRA","EXTREMELY","EYE","FACE","FACILITY","FACT","FACTOR","FACTORY","FAIL","FAILURE","FAIR","FAIRLY","FAITH","FALL","FAMILIAR","FAMILY","FAMOUS","FAR","FARM","FARMER","FASHION","FAST","FATHER","FAVOUR","FEAR","FEATURE","FEE","FEEL","FEELING","FEMALE","FEW","FIELD","FIGHT","FIGURE","FILE","FILL","FILM","FINAL","FINALLY","FINANCE","FINANCIAL","FIND","FINDING","FINE","FINGER","FINISH","FIRE","FIRM","FIRST","FISH","FIT","FIX","FLAT","FLIGHT","FLOOR","FLOW","FLOWER","FLY","FOCUS","FOLLOW","FOLLOWING","FOOD","FOOT","FOOTBALL","FOR","FORCE","FOREIGN","FOREST","FORGET","FORM","FORMAL","FORMER","FORWARD","FOUNDATION","FREE","FREEDOM","FREQUENTLY","FRESH","FRIEND","FROM","FRONT","FRUIT","FUEL","FULL","FULLY","FUNCTION","FUND","FUNNY","FURTHER","FUTURE","GAIN","GAME","GARDEN","GAS","GATE","GATHER","GENERAL","GENERALLY","GENERATE","GENERATION","GENTLEMAN","GET","GIRL","GIVE","GLASS","GO","GOAL","GOD","GOLD","GOOD","GOVERNMENT","GRANT","GREAT","GREEN","GREY","GROUND","GROUP","GROW","GROWING","GROWTH","GUEST","GUIDE","GUN","HAIR","HALF","HALL","HAND","HANDLE","HANG","HAPPEN","HAPPY","HARD","HARDLY","HATE","HAVE","HE","HEAD","HEALTH","HEAR","HEART","HEAT","HEAVY","HELL","HELP","HENCE","HER","HERE","HERSELF","HIDE","HIGH","HIGHLY","HILL","HIM","HIMSELF","HIS","HISTORICAL","HISTORY","HIT","HOLD","HOLE","HOLIDAY","HOME","HOPE","HORSE","HOSPITAL","HOT","HOTEL","HOUR","HOUSE","HOUSEHOLD","HOUSING","HOW","HOWEVER","HUGE","HUMAN","HURT","HUSBAND","I","IDEA","IDENTIFY","IF","IGNORE","ILLUSTRATE","IMAGE","IMAGINE","IMMEDIATE","IMMEDIATELY","IMPACT","IMPLICATION","IMPLY","IMPORTANCE","IMPORTANT","IMPOSE","IMPOSSIBLE","IMPRESSION","IMPROVE","IMPROVEMENT","IN","INCIDENT","INCLUDE","INCLUDING","INCOME","INCREASE","INCREASED","INCREASINGLY","INDEED","INDEPENDENT","INDEX","INDICATE","INDIVIDUAL","INDUSTRIAL","INDUSTRY","INFLUENCE","INFORM","INFORMATION","INITIAL","INITIATIVE","INJURY","INSIDE","INSIST","INSTANCE","INSTEAD","INSTITUTE","INSTITUTION","INSTRUCTION","INSTRUMENT","INSURANCE","INTEND","INTENTION","INTEREST","INTERESTED","INTERESTING","INTERNAL","INTERNATIONAL","INTERPRETATION","INTERVIEW","INTO","INTRODUCE","INTRODUCTION","INVESTIGATE","INVESTIGATION","INVESTMENT","INVITE","INVOLVE","IRON","IS","ISLAND","ISSUE","IT","ITEM","ITS","ITSELF","JOB","JOIN","JOINT","JOURNEY","JUDGE","JUMP","JUST","JUSTICE","KEEP","KEY","KID","KILL","KIND","KING","KITCHEN","KNEE","KNOW","KNOWLEDGE","LABOUR","LACK","LADY","LAND","LANGUAGE","LARGE","LARGELY","LAST","LATE","LATER","LATTER","LAUGH","LAUNCH","LAW","LAWYER","LAY","LEAD","LEADER","LEADERSHIP","LEADING","LEAF","LEAGUE","LEAN","LEARN","LEAST","LEAVE","LEFT","LEG","LEGAL","LEGISLATION","LENGTH","LESS","LET","LETTER","LEVEL","LIABILITY","LIBERAL","LIBRARY","LIE","LIFE","LIFT","LIGHT","LIKE","LIKELY","LIMIT","LIMITED","LINE","LINK","LIP","LIST","LISTEN","LITERATURE","LITTLE","LIVE","LIVING","LOAN","LOCAL","LOCATION","LONG","LOOK","LORD","LOSE","LOSS","LOT","LOVE","LOVELY","LOW","LUNCH","MACHINE","MAGAZINE","MAIN","MAINLY","MAINTAIN","MAJOR","MAJORITY","MAKE","MALE","MAN","MANAGE","MANAGEMENT","MANAGER","MANNER","MANY","MAP","MARK","MARKET","MARRIAGE","MARRIED","MARRY","MASS","MASTER","MATCH","MATERIAL","MATTER","MAY","MAYBE","ME","MEAL","MEAN","MEANING","MEANS","MEANWHILE","MEASURE","MECHANISM","MEDIA","MEDICAL","MEET","MEETING","MEMBER","MEMBERSHIP","MEMORY","MENTAL","MENTION","MERELY","MESSAGE","METAL","METHOD","MIDDLE","MIGHT","MILE","MILITARY","MILK","MIND","MINE","MINISTER","MINISTRY","MINUTE","MISS","MISTAKE","MODEL","MODERN","MODULE","MOMENT","MONEY","MONTH","MORE","MORNING","MOST","MOTHER","MOTION","MOTOR","MOUNTAIN","MOUTH","MOVE","MOVEMENT","MUCH","MURDER","MUSEUM","MUSIC","MUST","MY","MYSELF","NAME","NARROW","NATION","NATIONAL","NATURAL","NATURE","NEAR","NEARLY","NECESSARILY","NECESSARY","NECK","NEED","NEGOTIATION","NEIGHBOUR","NEITHER","NETWORK","NEVER","NEVERTHELESS","NEW","NEWS","NEWSPAPER","NEXT","NICE","NIGHT","NO","NOBODY","NOD","NOISE","NONE","NOR","NORMAL","NORMALLY","NORTH","NORTHERN","NOSE","NOT","NOTE","NOTHING","NOTICE","NOTION","NOW","NUCLEAR","NUMBER","NURSE","OBJECT","OBJECTIVE","OBSERVATION","OBSERVE","OBTAIN","OBVIOUS","OBVIOUSLY","OCCASION","OCCUR","ODD","OF","OFF","OFFENCE","OFFER","OFFICE","OFFICER","OFFICIAL","OFTEN","OIL","OKAY","OLD","ON","ONCE","ONE","ONLY","ONTO","OPEN","OPERATE","OPERATION","OPINION","OPPORTUNITY","OPPOSITION","OPTION","OR","ORDER","ORDINARY","ORGANISATION","ORGANISE","ORGANIZATION","ORIGIN","ORIGINAL","OTHER","OTHERWISE","OUGHT","OUR","OURSELVES","OUT","OUTCOME","OUTPUT","OUTSIDE","OVER","OVERALL","OWN","OWNER","PACKAGE","PAGE","PAIN","PAINT","PAINTING","PAIR","PANEL","PAPER","PARENT","PARK","PARLIAMENT","PART","PARTICULAR","PARTICULARLY","PARTLY","PARTNER","PARTY","PASS","PASSAGE","PAST","PATH","PATIENT","PATTERN","PAY","PAYMENT","PEACE","PENSION","PEOPLE","PER","PERCENT","PERFECT","PERFORM","PERFORMANCE","PERHAPS","PERIOD","PERMANENT","PERSON","PERSONAL","PERSUADE","PHASE","PHONE","PHOTOGRAPH","PHYSICAL","PICK","PICTURE","PIECE","PLACE","PLAN","PLANNING","PLANT","PLASTIC","PLATE","PLAY","PLAYER","PLEASE","PLEASURE","PLENTY","PLUS","POCKET","POINT","POLICE","POLICY","POLITICAL","POLITICS","POOL","POOR","POPULAR","POPULATION","POSITION","POSITIVE","POSSIBILITY","POSSIBLE","POSSIBLY","POST","POTENTIAL","POUND","POWER","POWERFUL","PRACTICAL","PRACTICE","PREFER","PREPARE","PRESENCE","PRESENT","PRESIDENT","PRESS","PRESSURE","PRETTY","PREVENT","PREVIOUS","PREVIOUSLY","PRICE","PRIMARY","PRIME","PRINCIPLE","PRIORITY","PRISON","PRISONER","PRIVATE","PROBABLY","PROBLEM","PROCEDURE","PROCESS","PRODUCE","PRODUCT","PRODUCTION","PROFESSIONAL","PROFIT","PROGRAM","PROGRAMME","PROGRESS","PROJECT","PROMISE","PROMOTE","PROPER","PROPERLY","PROPERTY","PROPORTION","PROPOSE","PROPOSAL","PROSPECT","PROTECT","PROTECTION","PROVE","PROVIDE","PROVIDED","PROVISION","PUB","PUBLIC","PUBLICATION","PUBLISH","PULL","PUPIL","PURPOSE","PUSH","PUT","QUALITY","QUARTER","QUESTION","QUICK","QUICKLY","QUIET","QUITE","RACE","RADIO","RAILWAY","RAIN","RAISE","RANGE","RAPIDLY","RARE","RATE","RATHER","REACH","REACTION","READ","READER","READING","READY","REAL","REALISE","REALITY","REALIZE","REALLY","REASON","REASONABLE","RECALL","RECEIVE","RECENT","RECENTLY","RECOGNISE","RECOGNITION","RECOGNIZE","RECOMMEND","RECORD","RECOVER","RED","REDUCE","REDUCTION","REFER","REFERENCE","REFLECT","REFORM","REFUSE","REGARD","REGION","REGIONAL","REGULAR","REGULATION","REJECT","RELATE","RELATION","RELATIONSHIP","RELATIVE","RELATIVELY","RELEASE","RELEVANT","RELIEF","RELIGION","RELIGIOUS","RELY","REMAIN","REMEMBER","REMIND","REMOVE","REPEAT","REPLACE","REPLY","REPORT","REPRESENT","REPRESENTATION","REPRESENTATIVE","REQUEST","REQUIRE","REQUIREMENT","RESEARCH","RESOURCE","RESPECT","RESPOND","RESPONSE","RESPONSIBILITY","RESPONSIBLE","REST","RESTAURANT","RESULT","RETAIN","RETURN","REVEAL","REVENUE","REVIEW","REVOLUTION","RICH","RIDE","RIGHT","RING","RISE","RISK","RIVER","ROAD","ROCK","ROLE","ROLL","ROOF","ROOM","ROUND","ROUTE","ROW","ROYAL","RULE","RUN","RURAL","SAFE","SAFETY","SALE","SAME","SAMPLE","SATISFY","SAVE","SAY","SCALE","SCENE","SCHEME","SCHOOL","SCIENCE","SCIENTIFIC","SCIENTIST","SCORE","SCREEN","SEA","SEARCH","SEASON","SEAT","SECOND","SECONDARY","SECRETARY","SECTION","SECTOR","SECURE","SECURITY","SEE","SEEK","SEEM","SELECT","SELECTION","SELL","SEND","SENIOR","SENSE","SENTENCE","SEPARATE","SEQUENCE","SERIES","SERIOUS","SERIOUSLY","SERVANT","SERVE","SERVICE","SESSION","SET","SETTLE","SETTLEMENT","SEVERAL","SEVERE","SEX","SEXUAL","SHAKE","SHALL","SHAPE","SHARE","SHE","SHEET","SHIP","SHOE","SHOOT","SHOP","SHORT","SHOT","SHOULD","SHOULDER","SHOUT","SHOW","SHUT","SIDE","SIGHT","SIGN","SIGNAL","SIGNIFICANCE","SIGNIFICANT","SILENCE","SIMILAR","SIMPLE","SIMPLY","SINCE","SING","SINGLE","SIR","SISTER","SIT","SITE","SITUATION","SIZE","SKILL","SKIN","SKY","SLEEP","SLIGHTLY","SLIP","SLOW","SLOWLY","SMALL","SMILE","SO","SOCIAL","SOCIETY","SOFT","SOFTWARE","SOIL","SOLDIER","SOLICITOR","SOLUTION","SOME","SOMEBODY","SOMEONE","SOMETHING","SOMETIMES","SOMEWHAT","SOMEWHERE","SON","SONG","SOON","SORRY","SORT","SOUND","SOURCE","SOUTH","SOUTHERN","SPACE","SPEAK","SPEAKER","SPECIAL","SPECIES","SPECIFIC","SPEECH","SPEED","SPEND","SPIRIT","SPORT","SPOT","SPREAD","SPRING","STAFF","STAGE","STAND","STANDARD","STAR","START","STATE","STATEMENT","STATION","STATUS","STAY","STEAL","STEP","STICK","STILL","STOCK","STONE","STOP","STORE","STORY","STRAIGHT","STRANGE","STRATEGY","STREET","STRENGTH","STRIKE","STRONG","STRONGLY","STRUCTURE","STUDENT","STUDIO","STUDY","STUFF","STYLE","SUBJECT","SUBSTANTIAL","SUCCEED","SUCCESS","SUCCESSFUL","SUCH","SUDDENLY","SUFFER","SUFFICIENT","SUGGEST","SUGGESTION","SUITABLE","SUM","SUMMER","SUN","SUPPLY","SUPPORT","SUPPOSE","SURE","SURELY","SURFACE","SURPRISE","SURROUND","SURVEY","SURVIVE","SWITCH","SYSTEM","TABLE","TAKE","TALK","TALL","TAPE","TARGET","TASK","TAX","TEA","TEACH","TEACHER","TEACHING","TEAM","TEAR","TECHNICAL","TECHNIQUE","TECHNOLOGY","TELEPHONE","TELEVISION","TELL","TEMPERATURE","TEND","TERM","TERMS","TERRIBLE","TEST","TEXT","THAN","THANK","THANKS","THAT","THE","THEATRE","THEIR","THEM","THEME","THEMSELVES","THEN","THEORY","THERE","THEREFORE","THESE","THEY","THIN","THING","THINK","THIS","THOSE","THOUGH","THOUGHT","THREAT","THREATEN","THROUGH","THROUGHOUT","THROW","THUS","TICKET","TIME","TINY","TITLE","TO","TODAY","TOGETHER","TOMORROW","TONE","TONIGHT","TOO","TOOL","TOOTH","TOP","TOTAL","TOTALLY","TOUCH","TOUR","TOWARDS","TOWN","TRACK","TRADE","TRADITION","TRADITIONAL","TRAFFIC","TRAIN","TRAINING","TRANSFER","TRANSPORT","TRAVEL","TREAT","TREATMENT","TREATY","TREE","TREND","TRIAL","TRIP","TROOP","TROUBLE","TRUE","TRUST","TRUTH","TRY","TURN","TWICE","TYPE","TYPICAL","UNABLE","UNDER","UNDERSTAND","UNDERSTANDING","UNDERTAKE","UNEMPLOYMENT","UNFORTUNATELY","UNION","UNIT","UNITED","UNIVERSITY","UNLESS","UNLIKELY","UNTIL","UP","UPON","UPPER","URBAN","US","USE","USED","USEFUL","USER","USUAL","USUALLY","VALUE","VARIATION","VARIETY","VARIOUS","VARY","VAST","VEHICLE","VERSION","VERY","VIA","VICTIM","VICTORY","VIDEO","VIEW","VILLAGE","VIOLENCE","VISION","VISIT","VISITOR","VITAL","VOICE","VOLUME","VOTE","WAGE","WAIT","WALK","WALL","WANT","WAR","WARM","WARN","WASH","WATCH","WATER","WAVE","WAY","WE","WEAK","WEAPON","WEAR","WEATHER","WEEK","WEEKEND","WEIGHT","WELCOME","WELFARE","WELL","WEST","WESTERN","WHAT","WHATEVER","WHEN","WHERE","WHEREAS","WHETHER","WHICH","WHILE","WHILST","WHITE","WHO","WHOLE","WHOM","WHOSE","WHY","WIDE","WIDELY","WIFE","WILD","WILL","WIN","WIND","WINDOW","WINE","WING","WINNER","WINTER","WISH","WITH","WITHDRAW","WITHIN","WITHOUT","WOMAN","WONDER","WONDERFUL","WOOD","WORD","WORK","WORKER","WORKING","WORKS","WORLD","WORRY","WORTH","WOULD","WRITE","WRITER","WRITING","WRONG","YARD","YEAH","YEAR","YES","YESTERDAY","YET","YOU","YOUNG","YOUR","YOURSELF","YOUTH" \ No newline at end of file diff --git a/problems/p42/src/main.rs b/problems/p42/src/main.rs new file mode 100644 index 0000000..f8494c7 --- /dev/null +++ b/problems/p42/src/main.rs @@ -0,0 +1,50 @@ +use std::fs::File; +use std::io::{BufRead, BufReader}; + +fn get_tri_num(n: u32) -> Vec { + (1..=n).map(|n| n * (n + 1) / 2).collect() +} + +fn get_words() -> Vec { + let file = File::open("./p042_words.txt").unwrap(); + let mut reader = BufReader::new(file); + let mut buf: String = String::new(); + reader.read_line(&mut buf).unwrap(); + let mut words: Vec = Vec::new(); + for word in buf.split(',') { + let word = word.trim_matches('"').to_string(); + words.push(word); + } + words +} + +fn get_word_value(word: &str) -> u32 { + let mut score = 0; + for c in word.chars() { + let c = c.to_ascii_lowercase(); + score += (c as u8 - b'a' + 1) as u32; + } + score +} +#[test] +fn test_get_word_value() { + let word = "SKY"; + assert_eq!(get_word_value(word), 55); +} + +fn main() { + let mut post_200_tri_num = get_tri_num(200); + let words = get_words(); + let mut counter = 0; + for word in words { + let score = get_word_value(&word); + if score < post_200_tri_num[post_200_tri_num.len() - 1] && post_200_tri_num.contains(&score) + { + counter += 1; + } else if score > post_200_tri_num[post_200_tri_num.len() - 1] { + println!("extending post_200_tri_num"); + post_200_tri_num = get_tri_num(post_200_tri_num.len() as u32 + 100); + } + } + println!("{counter}"); +} diff --git a/problems/p42/target/rust-analyzer/flycheck0/stderr b/problems/p42/target/rust-analyzer/flycheck0/stderr new file mode 100644 index 0000000..0bff46e --- /dev/null +++ b/problems/p42/target/rust-analyzer/flycheck0/stderr @@ -0,0 +1,12 @@ + 0.081616178s INFO prepare_target{force=false package_id=p42 v0.1.0 (/home/sangge/code/projecteuler/problems/p42) target="p42"}: cargo::core::compiler::fingerprint: stale: changed "/home/sangge/code/projecteuler/problems/p42/src/main.rs" + 0.081635313s INFO prepare_target{force=false package_id=p42 v0.1.0 (/home/sangge/code/projecteuler/problems/p42) target="p42"}: cargo::core::compiler::fingerprint: (vs) "/home/sangge/code/projecteuler/target/debug/.fingerprint/p42-80c1bd638c3b3d7c/dep-bin-p42" + 0.081639852s INFO prepare_target{force=false package_id=p42 v0.1.0 (/home/sangge/code/projecteuler/problems/p42) target="p42"}: cargo::core::compiler::fingerprint: FileTime { seconds: 1768800096, nanos: 937131814 } < FileTime { seconds: 1768800107, nanos: 228856355 } + 0.081684905s INFO prepare_target{force=false package_id=p42 v0.1.0 (/home/sangge/code/projecteuler/problems/p42) target="p42"}: cargo::core::compiler::fingerprint: fingerprint dirty for p42 v0.1.0 (/home/sangge/code/projecteuler/problems/p42)/Check { test: false }/TargetInner { name: "p42", doc: true, ..: with_path("/home/sangge/code/projecteuler/problems/p42/src/main.rs", Edition2024) } + 0.081696056s INFO prepare_target{force=false package_id=p42 v0.1.0 (/home/sangge/code/projecteuler/problems/p42) target="p42"}: cargo::core::compiler::fingerprint: dirty: FsStatusOutdated(StaleItem(ChangedFile { reference: "/home/sangge/code/projecteuler/target/debug/.fingerprint/p42-80c1bd638c3b3d7c/dep-bin-p42", reference_mtime: FileTime { seconds: 1768800096, nanos: 937131814 }, stale: "/home/sangge/code/projecteuler/problems/p42/src/main.rs", stale_mtime: FileTime { seconds: 1768800107, nanos: 228856355 } })) + 0.081861673s INFO prepare_target{force=false package_id=p42 v0.1.0 (/home/sangge/code/projecteuler/problems/p42) target="p42"}: cargo::core::compiler::fingerprint: stale: changed "/home/sangge/code/projecteuler/problems/p42/src/main.rs" + 0.081866662s INFO prepare_target{force=false package_id=p42 v0.1.0 (/home/sangge/code/projecteuler/problems/p42) target="p42"}: cargo::core::compiler::fingerprint: (vs) "/home/sangge/code/projecteuler/target/debug/.fingerprint/p42-eca59544334dcad0/dep-test-bin-p42" + 0.081870159s INFO prepare_target{force=false package_id=p42 v0.1.0 (/home/sangge/code/projecteuler/problems/p42) target="p42"}: cargo::core::compiler::fingerprint: FileTime { seconds: 1768800096, nanos: 937131814 } < FileTime { seconds: 1768800107, nanos: 228856355 } + 0.081897239s INFO prepare_target{force=false package_id=p42 v0.1.0 (/home/sangge/code/projecteuler/problems/p42) target="p42"}: cargo::core::compiler::fingerprint: fingerprint dirty for p42 v0.1.0 (/home/sangge/code/projecteuler/problems/p42)/Check { test: true }/TargetInner { name: "p42", doc: true, ..: with_path("/home/sangge/code/projecteuler/problems/p42/src/main.rs", Edition2024) } + 0.081903922s INFO prepare_target{force=false package_id=p42 v0.1.0 (/home/sangge/code/projecteuler/problems/p42) target="p42"}: cargo::core::compiler::fingerprint: dirty: FsStatusOutdated(StaleItem(ChangedFile { reference: "/home/sangge/code/projecteuler/target/debug/.fingerprint/p42-eca59544334dcad0/dep-test-bin-p42", reference_mtime: FileTime { seconds: 1768800096, nanos: 937131814 }, stale: "/home/sangge/code/projecteuler/problems/p42/src/main.rs", stale_mtime: FileTime { seconds: 1768800107, nanos: 228856355 } })) + Checking p42 v0.1.0 (/home/sangge/code/projecteuler/problems/p42) + Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.12s diff --git a/problems/p42/target/rust-analyzer/flycheck0/stdout b/problems/p42/target/rust-analyzer/flycheck0/stdout new file mode 100644 index 0000000..89f3ce8 --- /dev/null +++ b/problems/p42/target/rust-analyzer/flycheck0/stdout @@ -0,0 +1,3 @@ +{"reason":"compiler-artifact","package_id":"path+file:///home/sangge/code/projecteuler/problems/p42#0.1.0","manifest_path":"/home/sangge/code/projecteuler/problems/p42/Cargo.toml","target":{"kind":["bin"],"crate_types":["bin"],"name":"p42","src_path":"/home/sangge/code/projecteuler/problems/p42/src/main.rs","edition":"2024","doc":true,"doctest":false,"test":true},"profile":{"opt_level":"0","debuginfo":1,"debug_assertions":true,"overflow_checks":true,"test":false},"features":[],"filenames":["/home/sangge/code/projecteuler/target/debug/deps/libp42-80c1bd638c3b3d7c.rmeta"],"executable":null,"fresh":false} +{"reason":"compiler-artifact","package_id":"path+file:///home/sangge/code/projecteuler/problems/p42#0.1.0","manifest_path":"/home/sangge/code/projecteuler/problems/p42/Cargo.toml","target":{"kind":["bin"],"crate_types":["bin"],"name":"p42","src_path":"/home/sangge/code/projecteuler/problems/p42/src/main.rs","edition":"2024","doc":true,"doctest":false,"test":true},"profile":{"opt_level":"0","debuginfo":1,"debug_assertions":true,"overflow_checks":true,"test":true},"features":[],"filenames":["/home/sangge/code/projecteuler/target/debug/deps/libp42-eca59544334dcad0.rmeta"],"executable":null,"fresh":false} +{"reason":"build-finished","success":true} diff --git a/problems/p43/Cargo.toml b/problems/p43/Cargo.toml new file mode 100644 index 0000000..0ee646c --- /dev/null +++ b/problems/p43/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p43" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p43/src/main.rs b/problems/p43/src/main.rs new file mode 100644 index 0000000..b4a7d85 --- /dev/null +++ b/problems/p43/src/main.rs @@ -0,0 +1,40 @@ +fn solve() -> u64 { + let mut digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + let mut sum = 0; + loop { + if digits[0] != 0 && check_property(&digits) { + sum += digits.iter().fold(0u64, |acc, &d| acc * 10 + d as u64); + } + if !next_permutation(&mut digits) { + break; + } + } + sum +} + +fn next_permutation(array: &mut [T]) -> bool { + let i = match array.windows(2).rposition(|w| w[0] < w[1]) { + Some(i) => i, + None => return false, + }; + let j = array.iter().rposition(|x| x > &array[i]).unwrap(); + array.swap(i, j); + array[i + 1..].reverse(); + true +} + +fn check_property(d: &[i32]) -> bool { + let primes = [2, 3, 5, 7, 11, 13, 17]; + for i in 0..7 { + let num = (d[i + 1] * 100 + d[i + 2] * 10 + d[i + 3]) as u64; + if !num.is_multiple_of(primes[i]) { + return false; + } + } + true +} +fn main() { + let sum = solve(); + + println!("{sum}"); +} diff --git a/problems/p48/Cargo.toml b/problems/p48/Cargo.toml new file mode 100644 index 0000000..25f4ac6 --- /dev/null +++ b/problems/p48/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p48" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p48/src/main.rs b/problems/p48/src/main.rs new file mode 100644 index 0000000..62a7b3d --- /dev/null +++ b/problems/p48/src/main.rs @@ -0,0 +1,14 @@ +fn main() { + let modulas = 10u64.pow(10); + let mut result = 0; + for i in 1..1000 { + let mut tmp = 1; + for _ in 1..=i { + tmp *= i; + tmp %= modulas; + } + result += tmp; + result %= modulas; + } + println!("{result}"); +} diff --git a/problems/p5/Cargo.toml b/problems/p5/Cargo.toml new file mode 100644 index 0000000..be9bbf6 --- /dev/null +++ b/problems/p5/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "p5" +version = "0.1.0" +edition = "2024" + +[dependencies] + +num-integer = "0.1" diff --git a/problems/p5/src/main.rs b/problems/p5/src/main.rs new file mode 100644 index 0000000..dba1f06 --- /dev/null +++ b/problems/p5/src/main.rs @@ -0,0 +1,9 @@ +use num_integer::Integer; + +fn main() { + let mut result = 1; + for i in 1..=20 { + result = i.lcm(&result); + } + println!("{result}"); +} diff --git a/problems/p51/Cargo.toml b/problems/p51/Cargo.toml new file mode 100644 index 0000000..911d0ba --- /dev/null +++ b/problems/p51/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p51" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p51/src/main.rs b/problems/p51/src/main.rs new file mode 100644 index 0000000..9f9883d --- /dev/null +++ b/problems/p51/src/main.rs @@ -0,0 +1,4 @@ +fn main() { + todo!(); + println!("Hello, world!"); +} diff --git a/problems/p52/Cargo.toml b/problems/p52/Cargo.toml new file mode 100644 index 0000000..e9aa143 --- /dev/null +++ b/problems/p52/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p52" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p52/src/main.rs b/problems/p52/src/main.rs new file mode 100644 index 0000000..b5c036e --- /dev/null +++ b/problems/p52/src/main.rs @@ -0,0 +1,32 @@ +use std::collections::HashSet; + +fn is_same_digits(x: u32) -> bool { + let x_2 = x * 2; + let x_3 = x * 3; + let x_4 = x * 4; + let x_5 = x * 5; + let x_6 = x * 6; + let set_x: HashSet = x.to_string().chars().collect(); + let set_x_2: HashSet = x_2.to_string().chars().collect(); + let set_x_3: HashSet = x_3.to_string().chars().collect(); + let set_x_4: HashSet = x_4.to_string().chars().collect(); + let set_x_5: HashSet = x_5.to_string().chars().collect(); + let set_x_6: HashSet = x_6.to_string().chars().collect(); + set_x == set_x_2 + && set_x_2 == set_x_3 + && set_x_3 == set_x_4 + && set_x_4 == set_x_5 + && set_x_5 == set_x_6 +} + +fn main() { + let mut x = 1; + + loop { + if is_same_digits(x) { + println!("{x}"); + break; + } + x += 1; + } +} diff --git a/problems/p53/Cargo.toml b/problems/p53/Cargo.toml new file mode 100644 index 0000000..1d67e7d --- /dev/null +++ b/problems/p53/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p53" +version = "0.1.0" +edition = "2024" + +[dependencies] +primal = { workspace = true } diff --git a/problems/p53/src/main.rs b/problems/p53/src/main.rs new file mode 100644 index 0000000..11dace7 --- /dev/null +++ b/problems/p53/src/main.rs @@ -0,0 +1,54 @@ +use primal::Sieve; +use std::collections::HashMap; + +fn comb_ge_1m(n: u64, r: u64, factor_table: &Vec>) -> bool { + if r == 0 || r > n { + return false; + } + + let mut all_factors: HashMap = HashMap::new(); + + // Use symmetry: C(n,r) = C(n,n-r), choose smaller r + let r = r.min(n - r); + + // 分子:(n-r+1) * (n-r+2) * ... * n + for i in (n - r + 1)..=n { + let factors = &factor_table[i as usize - 1]; + for (prime, exp) in factors { + *all_factors.entry(*prime).or_insert(0) += *exp as i64; + } + } + // 分母:1 * 2 * ... * r + for i in 1..=r { + let factors = &factor_table[i as usize - 1]; + for (prime, exp) in factors { + *all_factors.entry(*prime).or_insert(0) -= *exp as i64; + } + } + + // Check if result >= 1M using logarithms to avoid overflow + let mut log_result = 0.0f64; + for (prime, exp) in all_factors { + if exp != 0 { + log_result += (prime as f64).ln() * (exp as f64); + } + } + + log_result >= 1_000_000.0f64.ln() +} + +fn main() { + let mut counter = 0; + let sieve = Sieve::new(100); + let factor_table: Vec> = + (1..=100).map(|x| sieve.factor(x).unwrap()).collect(); + + for n in 1..=100u64 { + for r in 1..=n { + if comb_ge_1m(n, r, &factor_table) { + counter += 1; + } + } + } + println!("{counter}"); +} diff --git a/problems/p6/Cargo.toml b/problems/p6/Cargo.toml new file mode 100644 index 0000000..d8397b4 --- /dev/null +++ b/problems/p6/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p6" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p6/src/main.rs b/problems/p6/src/main.rs new file mode 100644 index 0000000..b51977b --- /dev/null +++ b/problems/p6/src/main.rs @@ -0,0 +1,10 @@ +fn main() { + let mut sum_of_squares = 0; + for i in 1..=100 { + sum_of_squares += i * i; + } + let sum: i32 = (1..=100).sum(); + let squares_of_sum = sum * sum; + let difference = squares_of_sum - sum_of_squares; + println!("{difference}") +} diff --git a/problems/p614/Cargo.toml b/problems/p614/Cargo.toml new file mode 100644 index 0000000..c8a1b32 --- /dev/null +++ b/problems/p614/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p614" +version = "0.1.0" +edition = "2024" + +[dependencies] +num-bigint = "0.4.6" diff --git a/problems/p614/src/main.rs b/problems/p614/src/main.rs new file mode 100644 index 0000000..c1413f5 --- /dev/null +++ b/problems/p614/src/main.rs @@ -0,0 +1,38 @@ +// NOTE: incomplete + +const MOD: i64 = 1_000_000_007; + +fn solve_chunked() -> i64 { + let n = 10_000_000; + let chunk_size = 1_000_000; + let mut total_sum = 0i64; + + for chunk_start in (0..n).step_by(chunk_size) { + let chunk_end = std::cmp::min(chunk_start + chunk_size, n); + let chunk_n = chunk_end - chunk_start; + + let mut dp = vec![0i64; chunk_n + chunk_start + 1]; + dp[0] = 1; + + for num in 1..=chunk_end { + if num % 2 == 1 || num % 4 == 0 { + for i in (num..=chunk_end).rev() { + if i < dp.len() { + dp[i] = (dp[i] + dp[i - num]) % MOD; + } + } + } + } + + for i in std::cmp::max(1, chunk_start)..=chunk_end { + total_sum = (total_sum + dp[i]) % MOD; + } + } + + total_sum +} + +fn main() { + let result = solve_chunked(); + println!("{}", result); +} diff --git a/problems/p67/0067_triangle.txt b/problems/p67/0067_triangle.txt new file mode 100644 index 0000000..00aa2bc --- /dev/null +++ b/problems/p67/0067_triangle.txt @@ -0,0 +1,100 @@ +59 +73 41 +52 40 09 +26 53 06 34 +10 51 87 86 81 +61 95 66 57 25 68 +90 81 80 38 92 67 73 +30 28 51 76 81 18 75 44 +84 14 95 87 62 81 17 78 58 +21 46 71 58 02 79 62 39 31 09 +56 34 35 53 78 31 81 18 90 93 15 +78 53 04 21 84 93 32 13 97 11 37 51 +45 03 81 79 05 18 78 86 13 30 63 99 95 +39 87 96 28 03 38 42 17 82 87 58 07 22 57 +06 17 51 17 07 93 09 07 75 97 95 78 87 08 53 +67 66 59 60 88 99 94 65 55 77 55 34 27 53 78 28 +76 40 41 04 87 16 09 42 75 69 23 97 30 60 10 79 87 +12 10 44 26 21 36 32 84 98 60 13 12 36 16 63 31 91 35 +70 39 06 05 55 27 38 48 28 22 34 35 62 62 15 14 94 89 86 +66 56 68 84 96 21 34 34 34 81 62 40 65 54 62 05 98 03 02 60 +38 89 46 37 99 54 34 53 36 14 70 26 02 90 45 13 31 61 83 73 47 +36 10 63 96 60 49 41 05 37 42 14 58 84 93 96 17 09 43 05 43 06 59 +66 57 87 57 61 28 37 51 84 73 79 15 39 95 88 87 43 39 11 86 77 74 18 +54 42 05 79 30 49 99 73 46 37 50 02 45 09 54 52 27 95 27 65 19 45 26 45 +71 39 17 78 76 29 52 90 18 99 78 19 35 62 71 19 23 65 93 85 49 33 75 09 02 +33 24 47 61 60 55 32 88 57 55 91 54 46 57 07 77 98 52 80 99 24 25 46 78 79 05 +92 09 13 55 10 67 26 78 76 82 63 49 51 31 24 68 05 57 07 54 69 21 67 43 17 63 12 +24 59 06 08 98 74 66 26 61 60 13 03 09 09 24 30 71 08 88 70 72 70 29 90 11 82 41 34 +66 82 67 04 36 60 92 77 91 85 62 49 59 61 30 90 29 94 26 41 89 04 53 22 83 41 09 74 90 +48 28 26 37 28 52 77 26 51 32 18 98 79 36 62 13 17 08 19 54 89 29 73 68 42 14 08 16 70 37 +37 60 69 70 72 71 09 59 13 60 38 13 57 36 09 30 43 89 30 39 15 02 44 73 05 73 26 63 56 86 12 +55 55 85 50 62 99 84 77 28 85 03 21 27 22 19 26 82 69 54 04 13 07 85 14 01 15 70 59 89 95 10 19 +04 09 31 92 91 38 92 86 98 75 21 05 64 42 62 84 36 20 73 42 21 23 22 51 51 79 25 45 85 53 03 43 22 +75 63 02 49 14 12 89 14 60 78 92 16 44 82 38 30 72 11 46 52 90 27 08 65 78 03 85 41 57 79 39 52 33 48 +78 27 56 56 39 13 19 43 86 72 58 95 39 07 04 34 21 98 39 15 39 84 89 69 84 46 37 57 59 35 59 50 26 15 93 +42 89 36 27 78 91 24 11 17 41 05 94 07 69 51 96 03 96 47 90 90 45 91 20 50 56 10 32 36 49 04 53 85 92 25 65 +52 09 61 30 61 97 66 21 96 92 98 90 06 34 96 60 32 69 68 33 75 84 18 31 71 50 84 63 03 03 19 11 28 42 75 45 45 +61 31 61 68 96 34 49 39 05 71 76 59 62 67 06 47 96 99 34 21 32 47 52 07 71 60 42 72 94 56 82 83 84 40 94 87 82 46 +01 20 60 14 17 38 26 78 66 81 45 95 18 51 98 81 48 16 53 88 37 52 69 95 72 93 22 34 98 20 54 27 73 61 56 63 60 34 63 +93 42 94 83 47 61 27 51 79 79 45 01 44 73 31 70 83 42 88 25 53 51 30 15 65 94 80 44 61 84 12 77 02 62 02 65 94 42 14 94 +32 73 09 67 68 29 74 98 10 19 85 48 38 31 85 67 53 93 93 77 47 67 39 72 94 53 18 43 77 40 78 32 29 59 24 06 02 83 50 60 66 +32 01 44 30 16 51 15 81 98 15 10 62 86 79 50 62 45 60 70 38 31 85 65 61 64 06 69 84 14 22 56 43 09 48 66 69 83 91 60 40 36 61 +92 48 22 99 15 95 64 43 01 16 94 02 99 19 17 69 11 58 97 56 89 31 77 45 67 96 12 73 08 20 36 47 81 44 50 64 68 85 40 81 85 52 09 +91 35 92 45 32 84 62 15 19 64 21 66 06 01 52 80 62 59 12 25 88 28 91 50 40 16 22 99 92 79 87 51 21 77 74 77 07 42 38 42 74 83 02 05 +46 19 77 66 24 18 05 32 02 84 31 99 92 58 96 72 91 36 62 99 55 29 53 42 12 37 26 58 89 50 66 19 82 75 12 48 24 87 91 85 02 07 03 76 86 +99 98 84 93 07 17 33 61 92 20 66 60 24 66 40 30 67 05 37 29 24 96 03 27 70 62 13 04 45 47 59 88 43 20 66 15 46 92 30 04 71 66 78 70 53 99 +67 60 38 06 88 04 17 72 10 99 71 07 42 25 54 05 26 64 91 50 45 71 06 30 67 48 69 82 08 56 80 67 18 46 66 63 01 20 08 80 47 07 91 16 03 79 87 +18 54 78 49 80 48 77 40 68 23 60 88 58 80 33 57 11 69 55 53 64 02 94 49 60 92 16 35 81 21 82 96 25 24 96 18 02 05 49 03 50 77 06 32 84 27 18 38 +68 01 50 04 03 21 42 94 53 24 89 05 92 26 52 36 68 11 85 01 04 42 02 45 15 06 50 04 53 73 25 74 81 88 98 21 67 84 79 97 99 20 95 04 40 46 02 58 87 +94 10 02 78 88 52 21 03 88 60 06 53 49 71 20 91 12 65 07 49 21 22 11 41 58 99 36 16 09 48 17 24 52 36 23 15 72 16 84 56 02 99 43 76 81 71 29 39 49 17 +64 39 59 84 86 16 17 66 03 09 43 06 64 18 63 29 68 06 23 07 87 14 26 35 17 12 98 41 53 64 78 18 98 27 28 84 80 67 75 62 10 11 76 90 54 10 05 54 41 39 66 +43 83 18 37 32 31 52 29 95 47 08 76 35 11 04 53 35 43 34 10 52 57 12 36 20 39 40 55 78 44 07 31 38 26 08 15 56 88 86 01 52 62 10 24 32 05 60 65 53 28 57 99 +03 50 03 52 07 73 49 92 66 80 01 46 08 67 25 36 73 93 07 42 25 53 13 96 76 83 87 90 54 89 78 22 78 91 73 51 69 09 79 94 83 53 09 40 69 62 10 79 49 47 03 81 30 +71 54 73 33 51 76 59 54 79 37 56 45 84 17 62 21 98 69 41 95 65 24 39 37 62 03 24 48 54 64 46 82 71 78 33 67 09 16 96 68 52 74 79 68 32 21 13 78 96 60 09 69 20 36 +73 26 21 44 46 38 17 83 65 98 07 23 52 46 61 97 33 13 60 31 70 15 36 77 31 58 56 93 75 68 21 36 69 53 90 75 25 82 39 50 65 94 29 30 11 33 11 13 96 02 56 47 07 49 02 +76 46 73 30 10 20 60 70 14 56 34 26 37 39 48 24 55 76 84 91 39 86 95 61 50 14 53 93 64 67 37 31 10 84 42 70 48 20 10 72 60 61 84 79 69 65 99 73 89 25 85 48 92 56 97 16 +03 14 80 27 22 30 44 27 67 75 79 32 51 54 81 29 65 14 19 04 13 82 04 91 43 40 12 52 29 99 07 76 60 25 01 07 61 71 37 92 40 47 99 66 57 01 43 44 22 40 53 53 09 69 26 81 07 +49 80 56 90 93 87 47 13 75 28 87 23 72 79 32 18 27 20 28 10 37 59 21 18 70 04 79 96 03 31 45 71 81 06 14 18 17 05 31 50 92 79 23 47 09 39 47 91 43 54 69 47 42 95 62 46 32 85 +37 18 62 85 87 28 64 05 77 51 47 26 30 65 05 70 65 75 59 80 42 52 25 20 44 10 92 17 71 95 52 14 77 13 24 55 11 65 26 91 01 30 63 15 49 48 41 17 67 47 03 68 20 90 98 32 04 40 68 +90 51 58 60 06 55 23 68 05 19 76 94 82 36 96 43 38 90 87 28 33 83 05 17 70 83 96 93 06 04 78 47 80 06 23 84 75 23 87 72 99 14 50 98 92 38 90 64 61 58 76 94 36 66 87 80 51 35 61 38 +57 95 64 06 53 36 82 51 40 33 47 14 07 98 78 65 39 58 53 06 50 53 04 69 40 68 36 69 75 78 75 60 03 32 39 24 74 47 26 90 13 40 44 71 90 76 51 24 36 50 25 45 70 80 61 80 61 43 90 64 11 +18 29 86 56 68 42 79 10 42 44 30 12 96 18 23 18 52 59 02 99 67 46 60 86 43 38 55 17 44 93 42 21 55 14 47 34 55 16 49 24 23 29 96 51 55 10 46 53 27 92 27 46 63 57 30 65 43 27 21 20 24 83 +81 72 93 19 69 52 48 01 13 83 92 69 20 48 69 59 20 62 05 42 28 89 90 99 32 72 84 17 08 87 36 03 60 31 36 36 81 26 97 36 48 54 56 56 27 16 91 08 23 11 87 99 33 47 02 14 44 73 70 99 43 35 33 +90 56 61 86 56 12 70 59 63 32 01 15 81 47 71 76 95 32 65 80 54 70 34 51 40 45 33 04 64 55 78 68 88 47 31 47 68 87 03 84 23 44 89 72 35 08 31 76 63 26 90 85 96 67 65 91 19 14 17 86 04 71 32 95 +37 13 04 22 64 37 37 28 56 62 86 33 07 37 10 44 52 82 52 06 19 52 57 75 90 26 91 24 06 21 14 67 76 30 46 14 35 89 89 41 03 64 56 97 87 63 22 34 03 79 17 45 11 53 25 56 96 61 23 18 63 31 37 37 47 +77 23 26 70 72 76 77 04 28 64 71 69 14 85 96 54 95 48 06 62 99 83 86 77 97 75 71 66 30 19 57 90 33 01 60 61 14 12 90 99 32 77 56 41 18 14 87 49 10 14 90 64 18 50 21 74 14 16 88 05 45 73 82 47 74 44 +22 97 41 13 34 31 54 61 56 94 03 24 59 27 98 77 04 09 37 40 12 26 87 09 71 70 07 18 64 57 80 21 12 71 83 94 60 39 73 79 73 19 97 32 64 29 41 07 48 84 85 67 12 74 95 20 24 52 41 67 56 61 29 93 35 72 69 +72 23 63 66 01 11 07 30 52 56 95 16 65 26 83 90 50 74 60 18 16 48 43 77 37 11 99 98 30 94 91 26 62 73 45 12 87 73 47 27 01 88 66 99 21 41 95 80 02 53 23 32 61 48 32 43 43 83 14 66 95 91 19 81 80 67 25 88 +08 62 32 18 92 14 83 71 37 96 11 83 39 99 05 16 23 27 10 67 02 25 44 11 55 31 46 64 41 56 44 74 26 81 51 31 45 85 87 09 81 95 22 28 76 69 46 48 64 87 67 76 27 89 31 11 74 16 62 03 60 94 42 47 09 34 94 93 72 +56 18 90 18 42 17 42 32 14 86 06 53 33 95 99 35 29 15 44 20 49 59 25 54 34 59 84 21 23 54 35 90 78 16 93 13 37 88 54 19 86 67 68 55 66 84 65 42 98 37 87 56 33 28 58 38 28 38 66 27 52 21 81 15 08 22 97 32 85 27 +91 53 40 28 13 34 91 25 01 63 50 37 22 49 71 58 32 28 30 18 68 94 23 83 63 62 94 76 80 41 90 22 82 52 29 12 18 56 10 08 35 14 37 57 23 65 67 40 72 39 93 39 70 89 40 34 07 46 94 22 20 05 53 64 56 30 05 56 61 88 27 +23 95 11 12 37 69 68 24 66 10 87 70 43 50 75 07 62 41 83 58 95 93 89 79 45 39 02 22 05 22 95 43 62 11 68 29 17 40 26 44 25 71 87 16 70 85 19 25 59 94 90 41 41 80 61 70 55 60 84 33 95 76 42 63 15 09 03 40 38 12 03 32 +09 84 56 80 61 55 85 97 16 94 82 94 98 57 84 30 84 48 93 90 71 05 95 90 73 17 30 98 40 64 65 89 07 79 09 19 56 36 42 30 23 69 73 72 07 05 27 61 24 31 43 48 71 84 21 28 26 65 65 59 65 74 77 20 10 81 61 84 95 08 52 23 70 +47 81 28 09 98 51 67 64 35 51 59 36 92 82 77 65 80 24 72 53 22 07 27 10 21 28 30 22 48 82 80 48 56 20 14 43 18 25 50 95 90 31 77 08 09 48 44 80 90 22 93 45 82 17 13 96 25 26 08 73 34 99 06 49 24 06 83 51 40 14 15 10 25 01 +54 25 10 81 30 64 24 74 75 80 36 75 82 60 22 69 72 91 45 67 03 62 79 54 89 74 44 83 64 96 66 73 44 30 74 50 37 05 09 97 70 01 60 46 37 91 39 75 75 18 58 52 72 78 51 81 86 52 08 97 01 46 43 66 98 62 81 18 70 93 73 08 32 46 34 +96 80 82 07 59 71 92 53 19 20 88 66 03 26 26 10 24 27 50 82 94 73 63 08 51 33 22 45 19 13 58 33 90 15 22 50 36 13 55 06 35 47 82 52 33 61 36 27 28 46 98 14 73 20 73 32 16 26 80 53 47 66 76 38 94 45 02 01 22 52 47 96 64 58 52 39 +88 46 23 39 74 63 81 64 20 90 33 33 76 55 58 26 10 46 42 26 74 74 12 83 32 43 09 02 73 55 86 54 85 34 28 23 29 79 91 62 47 41 82 87 99 22 48 90 20 05 96 75 95 04 43 28 81 39 81 01 28 42 78 25 39 77 90 57 58 98 17 36 73 22 63 74 51 +29 39 74 94 95 78 64 24 38 86 63 87 93 06 70 92 22 16 80 64 29 52 20 27 23 50 14 13 87 15 72 96 81 22 08 49 72 30 70 24 79 31 16 64 59 21 89 34 96 91 48 76 43 53 88 01 57 80 23 81 90 79 58 01 80 87 17 99 86 90 72 63 32 69 14 28 88 69 +37 17 71 95 56 93 71 35 43 45 04 98 92 94 84 96 11 30 31 27 31 60 92 03 48 05 98 91 86 94 35 90 90 08 48 19 33 28 68 37 59 26 65 96 50 68 22 07 09 49 34 31 77 49 43 06 75 17 81 87 61 79 52 26 27 72 29 50 07 98 86 01 17 10 46 64 24 18 56 +51 30 25 94 88 85 79 91 40 33 63 84 49 67 98 92 15 26 75 19 82 05 18 78 65 93 61 48 91 43 59 41 70 51 22 15 92 81 67 91 46 98 11 11 65 31 66 10 98 65 83 21 05 56 05 98 73 67 46 74 69 34 08 30 05 52 07 98 32 95 30 94 65 50 24 63 28 81 99 57 +19 23 61 36 09 89 71 98 65 17 30 29 89 26 79 74 94 11 44 48 97 54 81 55 39 66 69 45 28 47 13 86 15 76 74 70 84 32 36 33 79 20 78 14 41 47 89 28 81 05 99 66 81 86 38 26 06 25 13 60 54 55 23 53 27 05 89 25 23 11 13 54 59 54 56 34 16 24 53 44 06 +13 40 57 72 21 15 60 08 04 19 11 98 34 45 09 97 86 71 03 15 56 19 15 44 97 31 90 04 87 87 76 08 12 30 24 62 84 28 12 85 82 53 99 52 13 94 06 65 97 86 09 50 94 68 69 74 30 67 87 94 63 07 78 27 80 36 69 41 06 92 32 78 37 82 30 05 18 87 99 72 19 99 +44 20 55 77 69 91 27 31 28 81 80 27 02 07 97 23 95 98 12 25 75 29 47 71 07 47 78 39 41 59 27 76 13 15 66 61 68 35 69 86 16 53 67 63 99 85 41 56 08 28 33 40 94 76 90 85 31 70 24 65 84 65 99 82 19 25 54 37 21 46 33 02 52 99 51 33 26 04 87 02 08 18 96 +54 42 61 45 91 06 64 79 80 82 32 16 83 63 42 49 19 78 65 97 40 42 14 61 49 34 04 18 25 98 59 30 82 72 26 88 54 36 21 75 03 88 99 53 46 51 55 78 22 94 34 40 68 87 84 25 30 76 25 08 92 84 42 61 40 38 09 99 40 23 29 39 46 55 10 90 35 84 56 70 63 23 91 39 +52 92 03 71 89 07 09 37 68 66 58 20 44 92 51 56 13 71 79 99 26 37 02 06 16 67 36 52 58 16 79 73 56 60 59 27 44 77 94 82 20 50 98 33 09 87 94 37 40 83 64 83 58 85 17 76 53 02 83 52 22 27 39 20 48 92 45 21 09 42 24 23 12 37 52 28 50 78 79 20 86 62 73 20 59 +54 96 80 15 91 90 99 70 10 09 58 90 93 50 81 99 54 38 36 10 30 11 35 84 16 45 82 18 11 97 36 43 96 79 97 65 40 48 23 19 17 31 64 52 65 65 37 32 65 76 99 79 34 65 79 27 55 33 03 01 33 27 61 28 66 08 04 70 49 46 48 83 01 45 19 96 13 81 14 21 31 79 93 85 50 05 +92 92 48 84 59 98 31 53 23 27 15 22 79 95 24 76 05 79 16 93 97 89 38 89 42 83 02 88 94 95 82 21 01 97 48 39 31 78 09 65 50 56 97 61 01 07 65 27 21 23 14 15 80 97 44 78 49 35 33 45 81 74 34 05 31 57 09 38 94 07 69 54 69 32 65 68 46 68 78 90 24 28 49 51 45 86 35 +41 63 89 76 87 31 86 09 46 14 87 82 22 29 47 16 13 10 70 72 82 95 48 64 58 43 13 75 42 69 21 12 67 13 64 85 58 23 98 09 37 76 05 22 31 12 66 50 29 99 86 72 45 25 10 28 19 06 90 43 29 31 67 79 46 25 74 14 97 35 76 37 65 46 23 82 06 22 30 76 93 66 94 17 96 13 20 72 +63 40 78 08 52 09 90 41 70 28 36 14 46 44 85 96 24 52 58 15 87 37 05 98 99 39 13 61 76 38 44 99 83 74 90 22 53 80 56 98 30 51 63 39 44 30 91 91 04 22 27 73 17 35 53 18 35 45 54 56 27 78 48 13 69 36 44 38 71 25 30 56 15 22 73 43 32 69 59 25 93 83 45 11 34 94 44 39 92 +12 36 56 88 13 96 16 12 55 54 11 47 19 78 17 17 68 81 77 51 42 55 99 85 66 27 81 79 93 42 65 61 69 74 14 01 18 56 12 01 58 37 91 22 42 66 83 25 19 04 96 41 25 45 18 69 96 88 36 93 10 12 98 32 44 83 83 04 72 91 04 27 73 07 34 37 71 60 59 31 01 54 54 44 96 93 83 36 04 45 +30 18 22 20 42 96 65 79 17 41 55 69 94 81 29 80 91 31 85 25 47 26 43 49 02 99 34 67 99 76 16 14 15 93 08 32 99 44 61 77 67 50 43 55 87 55 53 72 17 46 62 25 50 99 73 05 93 48 17 31 70 80 59 09 44 59 45 13 74 66 58 94 87 73 16 14 85 38 74 99 64 23 79 28 71 42 20 37 82 31 23 +51 96 39 65 46 71 56 13 29 68 53 86 45 33 51 49 12 91 21 21 76 85 02 17 98 15 46 12 60 21 88 30 92 83 44 59 42 50 27 88 46 86 94 73 45 54 23 24 14 10 94 21 20 34 23 51 04 83 99 75 90 63 60 16 22 33 83 70 11 32 10 50 29 30 83 46 11 05 31 17 86 42 49 01 44 63 28 60 07 78 95 40 +44 61 89 59 04 49 51 27 69 71 46 76 44 04 09 34 56 39 15 06 94 91 75 90 65 27 56 23 74 06 23 33 36 69 14 39 05 34 35 57 33 22 76 46 56 10 61 65 98 09 16 69 04 62 65 18 99 76 49 18 72 66 73 83 82 40 76 31 89 91 27 88 17 35 41 35 32 51 32 67 52 68 74 85 80 57 07 11 62 66 47 22 67 +65 37 19 97 26 17 16 24 24 17 50 37 64 82 24 36 32 11 68 34 69 31 32 89 79 93 96 68 49 90 14 23 04 04 67 99 81 74 70 74 36 96 68 09 64 39 88 35 54 89 96 58 66 27 88 97 32 14 06 35 78 20 71 06 85 66 57 02 58 91 72 05 29 56 73 48 86 52 09 93 22 57 79 42 12 01 31 68 17 59 63 76 07 77 +73 81 14 13 17 20 11 09 01 83 08 85 91 70 84 63 62 77 37 07 47 01 59 95 39 69 39 21 99 09 87 02 97 16 92 36 74 71 90 66 33 73 73 75 52 91 11 12 26 53 05 26 26 48 61 50 90 65 01 87 42 47 74 35 22 73 24 26 56 70 52 05 48 41 31 18 83 27 21 39 80 85 26 08 44 02 71 07 63 22 05 52 19 08 20 +17 25 21 11 72 93 33 49 64 23 53 82 03 13 91 65 85 02 40 05 42 31 77 42 05 36 06 54 04 58 07 76 87 83 25 57 66 12 74 33 85 37 74 32 20 69 03 97 91 68 82 44 19 14 89 28 85 85 80 53 34 87 58 98 88 78 48 65 98 40 11 57 10 67 70 81 60 79 74 72 97 59 79 47 30 20 54 80 89 91 14 05 33 36 79 39 +60 85 59 39 60 07 57 76 77 92 06 35 15 72 23 41 45 52 95 18 64 79 86 53 56 31 69 11 91 31 84 50 44 82 22 81 41 40 30 42 30 91 48 94 74 76 64 58 74 25 96 57 14 19 03 99 28 83 15 75 99 01 89 85 79 50 03 95 32 67 44 08 07 41 62 64 29 20 14 76 26 55 48 71 69 66 19 72 44 25 14 01 48 74 12 98 07 +64 66 84 24 18 16 27 48 20 14 47 69 30 86 48 40 23 16 61 21 51 50 26 47 35 33 91 28 78 64 43 68 04 79 51 08 19 60 52 95 06 68 46 86 35 97 27 58 04 65 30 58 99 12 12 75 91 39 50 31 42 64 70 04 46 07 98 73 98 93 37 89 77 91 64 71 64 65 66 21 78 62 81 74 42 20 83 70 73 95 78 45 92 27 34 53 71 15 +30 11 85 31 34 71 13 48 05 14 44 03 19 67 23 73 19 57 06 90 94 72 57 69 81 62 59 68 88 57 55 69 49 13 07 87 97 80 89 05 71 05 05 26 38 40 16 62 45 99 18 38 98 24 21 26 62 74 69 04 85 57 77 35 58 67 91 79 79 57 86 28 66 34 72 51 76 78 36 95 63 90 08 78 47 63 45 31 22 70 52 48 79 94 15 77 61 67 68 +23 33 44 81 80 92 93 75 94 88 23 61 39 76 22 03 28 94 32 06 49 65 41 34 18 23 08 47 62 60 03 63 33 13 80 52 31 54 73 43 70 26 16 69 57 87 83 31 03 93 70 81 47 95 77 44 29 68 39 51 56 59 63 07 25 70 07 77 43 53 64 03 94 42 95 39 18 01 66 21 16 97 20 50 90 16 70 10 95 69 29 06 25 61 41 26 15 59 63 35 diff --git a/problems/p67/Cargo.toml b/problems/p67/Cargo.toml new file mode 100644 index 0000000..25c3ad4 --- /dev/null +++ b/problems/p67/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p67" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p67/src/main.rs b/problems/p67/src/main.rs new file mode 100644 index 0000000..719b7ff --- /dev/null +++ b/problems/p67/src/main.rs @@ -0,0 +1,30 @@ +use std::{ + fs::File, + io::{BufRead, BufReader}, +}; + +fn main() { + let mut matrix = [[0u32; 100]; 100]; + let file = File::open("problems/p67/0067_triangle.txt").unwrap(); + let reader = BufReader::new(file); + + let mut rows = 0; + for (row_idx, line) in reader.lines().enumerate() { + let line = line.unwrap(); + for (col_idx, num) in line.split_whitespace().enumerate() { + matrix[row_idx][col_idx] = num.parse().unwrap(); + } + rows = row_idx + 1; + } + + // 动态规划:从底向上 + let mut dp = matrix; + + for row in (0..rows - 1).rev() { + for col in 0..=row { + dp[row][col] += dp[row + 1][col].max(dp[row + 1][col + 1]); + } + } + + println!("{}", dp[0][0]); +} diff --git a/problems/p7/Cargo.toml b/problems/p7/Cargo.toml new file mode 100644 index 0000000..65ab25d --- /dev/null +++ b/problems/p7/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p7" +version = "0.1.0" +edition = "2024" + +[dependencies] +primes = "0.4" diff --git a/problems/p7/src/main.rs b/problems/p7/src/main.rs new file mode 100644 index 0000000..bf78a71 --- /dev/null +++ b/problems/p7/src/main.rs @@ -0,0 +1,7 @@ +use primes::{PrimeSet, Sieve}; + +fn main() { + let mut pset = Sieve::new(); + let prime = pset.iter().nth(10000).unwrap(); + println!("{prime}"); +} diff --git a/problems/p76/Cargo.toml b/problems/p76/Cargo.toml new file mode 100644 index 0000000..6cd46e0 --- /dev/null +++ b/problems/p76/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "p76" +version = "0.1.0" +edition = "2024" + +[dependencies] +num-bigint = { workspace = true } diff --git a/problems/p76/src/main.rs b/problems/p76/src/main.rs new file mode 100644 index 0000000..4ee6518 --- /dev/null +++ b/problems/p76/src/main.rs @@ -0,0 +1,24 @@ +// 2 -> 1: 1 + 1 +// 3 -> 2: 2 + 1, 1 + 1 + 1 +// 4 -> 4: 3 + 1, 2 + 2, 2 + 1 + 1, 1 + 1 + 1 + 1 +// 5 -> 4: 4 + 1, 3 + 2, 3 + 1 + 1, 2 + 2 + 1, +// n -> x: (n-1) + 1, +use num_bigint::BigUint; + +fn split(n: u64) -> BigUint { + let n = n as usize; + let mut dp = vec![BigUint::ZERO; n + 1]; + dp[0] = BigUint::from(1u32); + for i in 1..n { + for j in i..=n { + let temp = dp[j - i].clone(); + dp[j] += temp; + } + } + dp[n].clone() +} + +fn main() { + let result = split(100); + println!("{result}"); +} diff --git a/problems/p8/Cargo.toml b/problems/p8/Cargo.toml new file mode 100644 index 0000000..71e0d2b --- /dev/null +++ b/problems/p8/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p8" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p8/src/main.rs b/problems/p8/src/main.rs new file mode 100644 index 0000000..1e9a726 --- /dev/null +++ b/problems/p8/src/main.rs @@ -0,0 +1,33 @@ +fn find_max_product_optimized(number_str: &str, window_size: usize) -> u64 { + let digits: Vec = number_str + .chars() + .map(|c| c.to_digit(10).unwrap()) + .collect(); + + let mut max_product = 0u64; + let mut i = 0; + + while i <= digits.len() - window_size { + // 检查从当前位置开始的window_size个数字 + let window = &digits[i..i + window_size]; + + // 如果包含0,跳到0之后继续 + if let Some(zero_pos) = window.iter().position(|&x| x == 0) { + i += zero_pos + 1; + continue; + } + + let product: u64 = window.iter().map(|&x| x as u64).product(); + max_product = max_product.max(product); + i += 1; + } + + max_product +} + +fn main() { + let number_str = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"; + + let result = find_max_product_optimized(number_str, 13); + println!("连续十三个数字的最大乘积是: {result}"); +} diff --git a/problems/p87/Cargo.toml b/problems/p87/Cargo.toml new file mode 100644 index 0000000..8548b43 --- /dev/null +++ b/problems/p87/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p87" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p87/src/main.rs b/problems/p87/src/main.rs new file mode 100644 index 0000000..c89b901 --- /dev/null +++ b/problems/p87/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + todo!(); +} diff --git a/problems/p9/Cargo.toml b/problems/p9/Cargo.toml new file mode 100644 index 0000000..0860c29 --- /dev/null +++ b/problems/p9/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p9" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/problems/p9/src/main.rs b/problems/p9/src/main.rs new file mode 100644 index 0000000..53be110 --- /dev/null +++ b/problems/p9/src/main.rs @@ -0,0 +1,15 @@ +fn main() { + for a in 1..=1000 { + for b in 1..=a { + let equition = 1000000 - 2000 * (a + b) + 2 * a * b; + if equition == 0 { + println!("a:{a}, b:{b}"); + } + } + } + let a = 375; + let b = 200; + let c = ((a * a + b * b) as f64).sqrt(); + println!("{c}"); + println!("{}", a * b * c as i32); +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +}