C++判断是否为素数、求一个数的因数、质因数分解
生活随笔
收集整理的這篇文章主要介紹了
C++判断是否为素数、求一个数的因数、质因数分解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
判斷一個數是否為素數
#include<iostream> #include<vector> #include<math.h> #include<algorithm>/*判斷是否為素數*/ bool isprime(int n) {bool result;int k = (int)sqrt((double)n); // 只需要循環到 √n 即可int i = 0;for (i = 2; i <= k; i++){if (n%i == 0)break;}result = (i > k);return result; }void test_isprime() {std::cout << " isprime(2) = " << isprime(2) << '\n';std::cout << " isprime(10) = " << isprime(10) << '\n';std::cout << " isprime(17) = " << isprime(17) << '\n'; }求一個數的因數
/* 尋找所有因數 包括1和其本身*/ std::vector<int> factorize(int n) {std::vector<int> answer;int k = (int)sqrt((double)n);int i = 0;for (i = 1; i <= k; i++){if (!(n%i)){answer.push_back(i);answer.push_back(n / i);}}sort(answer.begin(), answer.end()); // 利用sort函數進行排序,再輸出,這一步若不是必須可省略std::cout << " The factors of " << n << " are";return answer; }/* 打印vector */ void print_vector(std::vector<int>& vec) {for (auto it = vec.cbegin(); it != vec.cend(); ++it)std::cout << ' ' << *it;std::cout << '\n'; }void test_factorize() {std::vector<int> vf;vf = factorize(2);print_vector(vf);vf = factorize(72);print_vector(vf);vf = factorize(196);print_vector(vf); }質因數分解
/* 質因數分解 */ std::vector<int> prime_factorize(int n) {std::vector<int> answer;if (n != 2){int k = (int)sqrt((double)n); // 只需要循環到 √n 即可int i = 0, m = n;for (i = 2; i <= k; i++){while (m%i == 0){m = m / i;answer.push_back(i);}if (m == n)answer.push_back(n);}}elseanswer.push_back(n);std::cout << " The prime factorization of " << n << " are";return answer; }void test_prime_factorize() {std::vector<int> vf;vf = prime_factorize(2);print_vector(vf);vf = prime_factorize(72);print_vector(vf);vf = prime_factorize(196);print_vector(vf); }int main() {test_isprime();test_factorize();test_prime_factorize();return 0; }結果
總結
以上是生活随笔為你收集整理的C++判断是否为素数、求一个数的因数、质因数分解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 循环自相关函数和谱相关密度(五)——实信
- 下一篇: Collatz函数的C++递归实现