[英]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.