整數的因子包含自身嗎

本篇文章將從數學概念的角度、常用算法的應用、程序實現的方法等多個方面,對整數的因子包含自身的問題進行詳細闡述。

一、質因數分解法

將整數進行質因數分解,若分解結果中所有質因子的指數都不為0,則該整數的因子包含自身;否則,不包含自身。這一方法的時間複雜度為O(log(n))。


#include <iostream>
#include <vector>
using namespace std;

vector<int> PrimeFactors(int n) {
    vector<int> factors; //存儲質因數
    for (int i = 2; i * i <= n; ++i) {
        while (n % i == 0) {
            factors.push_back(i);
            n /= i;
        }
    }
    if (n > 1) factors.push_back(n); //n為質數時也要記錄
    return factors;
}

bool ContainsSelf(int n) {
    vector<int> factors = PrimeFactors(n);
    vector<bool> used(factors.size(), false); //標記數組,初始均為false
    for (int i = 0; i < factors.size(); ++i) {
        for (int j = i + 1; j < factors.size(); ++j) {
            if (factors[j] % factors[i] == 0) used[j] = true; //factors[j]包含factors[i],標記j
        }
    }
    for (int i = 0; i < factors.size(); ++i) {
        if (!used[i]) return true; //如果有質因子未被標記,說明包含自身
    }
    return false;
}

int main() {
    int n;
    cin >> n;
    if (ContainsSelf(n)) cout << n << "的因子包含自身。";
    else cout << n << "的因子不包含自身。";
    return 0;
}

二、暴力算法

對於一個整數n,從1到n-1不斷枚舉它的因子,如果它的因子中包含n本身,則說明它的因子包含自身。時間複雜度為O(nlog(n))。


#include <iostream>
using namespace std;

bool ContainsSelf(int n) {
    int sum = 0; //因子之和
    for (int i = 1; i < n; ++i) {
        if (n % i == 0) sum += i;
    }
    return (sum % n == 0);
}

int main() {
    int n;
    cin >> n;
    if (ContainsSelf(n)) cout << n << "的因子包含自身。";
    else cout << n << "的因子不包含自身。";
    return 0;
}

三、素數判定法

如果一個整數n為素數,並且(n-1)可以被4整除,則n的因子包含自身。這一方法的時間複雜度為O(sqrt(n))。


#include <iostream>
using namespace std;

bool IsPrime(int n) { //素數判定函數
    if (n < 2) return false;
    for (int i = 2; i * i <= n; ++i) {
        if (n % i == 0) return false;
    }
    return true;
}

bool ContainsSelf(int n) {
    if (!IsPrime(n)) return false;
    int m = n - 1;
    while (m % 2 == 0) m /= 2; //計算(n-1)/2^k
    return (m % 4 == 0); //(n-1)/2^k能否被4整除
}

int main() {
    int n;
    cin >> n;
    if (ContainsSelf(n)) cout << n << "的因子包含自身。";
    else cout << n << "的因子不包含自身。";
    return 0;
}

四、結語

本文介紹了三種判斷整數的因子是否包含自身的方法。其中,質因數分解法時間複雜度相對較低,且易於實現;暴力算法雖然代碼簡單,但時間複雜度較高,不適合處理大型數據;素數判定法則更適用於判斷較大的整數。具體使用時,建議根據具體的需求和數據規模選擇合適的方法。

原創文章,作者:HWPZE,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/375075.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HWPZE的頭像HWPZE
上一篇 2025-04-29 12:49
下一篇 2025-04-29 12:49

相關推薦

  • 如何輸入三個整數,並輸出最大值Python

    對於初學者來說,輸入三個整數並輸出它們的最大值可能是一個比較基礎的問題。然而,它卻包含了Python中許多基本知識點的應用,因此學習它可以讓我們更好地理解Python編程語言。 一…

    編程 2025-04-29
  • Python隨機生成100內的10個整數

    本文將從以下幾個方面詳細闡述Python隨機生成100內的10個整數: 一、random庫介紹 在Python中,生成隨機數可以使用random庫。random庫包括兩種類型的函數…

    編程 2025-04-29
  • 全能編程開發工程師必備技能——如何優化大整數的計算

    本文將會為你分享如何解決大整數計算問題,以9999999967為例,我們將從多個方面對其做詳細闡述,並給出完整的代碼示例。 一、大整數的表示方法 在計算機中,我們通常採用二進制數來…

    編程 2025-04-29
  • Python中的整數類型int類總覽

    本文將從多個方面,對Python中的整數類型int類進行全面介紹和闡述。 一、數據類型及基本操作 在Python中,整數類型的數據類型為int。在Python3.x中,整數類型的范…

    編程 2025-04-28
  • Python計算ab之間整數的和

    本篇文章將闡述如何用Python計算ab之間整數的和以及使用for循環求解,希望本文能對正在學習Python的人們有所幫助。 一、計算ab之間整數的和 首先我們需要明確什麼是ab之…

    編程 2025-04-28
  • Python元組元素分成單個整數

    本文將介紹如何將Python元組中的元素分成單個整數,並提供多種實現方式。 一、使用for循環遍曆元組實現 可以通過for循環遍曆元組的每一個元素,再將其轉換成整數,並存儲在新的列…

    編程 2025-04-28
  • Python整數序列求和

    本文主要介紹如何使用Python求解整數序列的和,給出了多種方法和示例代碼。 一、基本概念 在Python中,整數序列指的是一組整數的集合,可以使用列表(list)或元組(tupl…

    編程 2025-04-27
  • Python整數轉七進制的實現方法

    本文將為大家介紹Python編程語言中實現將整數轉換為七進制數的方法,旨在幫助初學者了解Python中的整數轉換及進制轉換的實現方法。 一、進制轉換的基本概念 在計算機科學中,進制…

    編程 2025-04-27
  • Python輸出整數的二進制

    本文將從以下幾個方面對Python輸出整數的二進制進行詳細的闡述: 一、bin()函數的使用 Python提供了一個內置函數bin(),可以將整數轉換成二進制數。 n = 10 s…

    編程 2025-04-27
  • JavaScript保留整數的完整指南

    JavaScript是一種通用腳本語言,非常適合Web應用程序開發。在處理數字時,JavaScript可以處理整數和浮點數。在本文中,我們將重點關注JavaScript如何保留整數…

    編程 2025-04-25

發表回復

登錄後才能評論