diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5baf683 --- /dev/null +++ b/.gitignore @@ -0,0 +1,41 @@ +# CMake +build* +cmake-build-* +meson-build-* +*.out +*.exe + +# Xcode +*.xcworkspace +*.xcodeproj + +# Visual Studio +*.sln +*.vcxproj +*.vcxproj.filters +*.vcxproj.user +.vs + +# Makefile +Makefile +*.make + +# nvim +.ccls +.ccls-cache +compile_commands.json + +# Visual Studio Code +.vscode + +# JetBrains +.idea +.fleet + +# macOS +.DS_Store +.AppleDouble +.LSOverride + +# Cache +.cache diff --git a/futureskills/primefactors.cpp b/futureskills/primefactors.cpp new file mode 100644 index 0000000..81c6bcb --- /dev/null +++ b/futureskills/primefactors.cpp @@ -0,0 +1,29 @@ +#include +#include +#include + +using prime_vec_t = std::vector; + +// https://en.wikipedia.org/wiki/Trial_division +auto prime_factors(int num) -> prime_vec_t { + prime_vec_t primes{}; + int f = 2; + while (num > 1) { + if (num % f == 0) { + primes.emplace_back(f); + num = num / f; + } else { + f += 1; + } + } + return primes; +} + +auto main([[maybe_unused]]int argc, [[maybe_unused]]char const* argv[]) -> int { + auto factors = prime_factors(20); + for (auto const& factor : factors) { + std::printf("%d, ", factor); + } + std::printf("\n"); + return 0; +}