簡體   English   中英

找出一個數的所有質因數

[英]finding all prime factors of a number

該程序計算否的所有因素。 首先找到所有質因數,然后將它們的指數加 1,然后將它們相乘。 但是在 for 循環中,我在每次迭代中都會增加 2。這是不是錯誤,因為在 7 之后它會增加到 9 這不是素數? 還是我錯了? 誰能解釋一下!

#include<bits/stdc++.h>
using namespace std;

int main() 
{
    int n,i;
    cin>>n;
    int factors=1,exponen=0;//exponent stores power of current prime
    while(n%2==0)//a separate check for 2       {
        exponen++;
        n=n/2;
    }
    factors= factors*(exponen+1);
    exponen=0;
    int original_n=n;
    for(i=3;n>1 && i<=sqrt(original_n);i+=2)//Checking for every prime number
    {
        exponen=0;
        while(n%i==0)
        {
            exponen++;
            n=n/i;
        }
        factors= factors*(exponen+1);
    }
    cout<< factors<< endl;
    return 0;
}
    while(n%i==0)
    {
        exponen++;
        n=n/i;
    }

該循環從n刪除(並計算)所有i因子,直到沒有剩余。

因此,當您達到9您已經去除了3所有冪,因此此時9永遠不會除以n :算法有效

注意:此方法不是最有效的方法,循環使用 Erathostenes 篩生成的實際素數列表可以加快速度,因為沒有對每個奇數進行測試,僅對素數進行測試(循環不能那么容易避免, 盡管)

我不確定它是計算還是數學。

但是如果i是復合的,它永遠不會除以n的當前值。 那是因為合數i所有質因數都已經被訪問過並“除”了n

9是特例。 任何 3 的因數都被除掉了,所以當i達到 9 時n%i==0永遠不會為真。

類似地,當它達到 15 時,3 和 5 的因數已被除掉, n%15==0將為假。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM