c語言分解質因數的問題,C語言分解質因數

2021-12-16 13:14:57 字數 5200 閱讀 4743

1樓:匿名使用者

我不得不遺憾的告訴你,這是一個效率非常低的演算法,每找到一個素因子後都重新從2開始再次尋找,一個顯然的改進是找到一個素因子後反覆試除該因子

2樓:高金山

這樣註釋的已經很好了啊

if(m%k!=0),說明還沒找到因數,每次都是從2開始,逐漸遞增,來找因數的

else,else部分,說明已經找到了因數,找到因數以後,先把因數列印出來,然後讓m等於被除後的數,讓k=2,也就是從2開始,繼續遞增找其他的因數啊

舉個例子,你就明白了,比如15,你要對它進行分解質因數,該怎麼做呢

先讓k=2,發現15%2!=0了,說明2不是它的因數,讓k++

k=3的時候,發現15%3==0了,說明3是它的一個因數,列印出3,讓m=15/3=5,讓k=2

5%2!=0,5%3!=0,5%4!=0,說明2,3,4,都不是5的因數,k繼續自加

k=5,5%5==0了,說明5是5的因數,所以,列印5,m=5/5=1,k=2,這時,就會退出for迴圈了

逐行分析,見下面:

if(m%k!=0) //m不能被k整除,說明k不是m的因數

else //m不能被k整除,說明k是m的一個因數

3樓:冰封莊子

分解質因數,就是將一個合數分解成幾個質數的乘積。

比如20=2*2*5

求質因數就是從2開始除,這就是這個演算法的原理比如輸入20

能被2整除,

輸出20的第一個質因數2

此時m=10 ,k=2 //接著就是求10的質因數。。。

10能被2整除,

輸出20的第2個質因數2

此時m=5,k=2 //接著求5的質因數。。。

5是質數,不能被除1和他本身外的數整除,k就從2加到5。。。

後輸出20的最後一個質因數5

4樓:星月小木木

實現方法如下:

#include

void main( )

else i++;}}

5樓:逃離

if(m%k!=0)

m=m/k; //這個程式應該是要輸出,一個數包含哪幾個因子,所以要判斷除最小質因子後,那個數還有幾個因子。

k=2; //讓k重新等於2

} }printf("%d",k); //最後是輸出小於m=m/k 後k的值 例如12=2*2*3 那個3 因為那時的m=3 k=3 不滿足k

6樓:九天之鳳舞

if(m%k!=0)

這句話的意思就是說當k不是m的約數時,繼續找下一個k(即比k多1的數),判斷它是否是m的約數,是則輸出不是則繼續判斷下一個。

k=2; //讓k重新等於2

這個的意思是一個數如果找到了一個約數(比如2), 那麼找下一個約數之前仍然應該從2開始找,因為他可能仍有2這個質因子,比如24=2*2*2*3,第一次找到2,第二次仍然要從2開始判斷它是不是24的約數。

有不明白的地方再提出來吧~

7樓:

#include

void main()

else

} printf("%d",k);}

c語言分解質因數

8樓:高金山

if(m%k!=0),說明還沒找到因數,每次都是從2開始,逐漸遞增,來找因數的

else,else部分,說明已經找到了因數,找到因數以後,先把因數列印出來,然後讓m等於被除後的數,讓k=2,也就是從2開始,繼續遞增找其他的因數啊

舉個例子,你就明白了,比如15,你要對它進行分解質因數,該怎麼做呢

先讓k=2,發現15%2!=0了,說明2不是它的因數,讓k++

k=3的時候,發現15%3==0了,說明3是它的一個因數,列印出3,讓m=15/3=5,讓k=2

5%2!=0,5%3!=0,5%4!=0,說明2,3,4,都不是5的因數,k繼續自加

k=5,5%5==0了,說明5是5的因數,所以,列印5,m=5/5=1,k=2,這時,就會退出for迴圈了

逐行分析,見下面:

if(m%k!=0) //m不能被k整除,說明k不是m的因數

else //m不能被k整除,說明k是m的一個因數

9樓:匿名使用者

#include

void main()

else

} printf("%d",k);}

10樓:九天之鳳舞

if(m%k!=0)

這句話的意思就是說當k不是m的約數時,繼續找下一個k(即比k多1的數),判斷它是否是m的約數,是則輸出不是則繼續判斷下一個。

k=2; //讓k重新等於2

這個的意思是一個數如果找到了一個約數(比如2), 那麼找下一個約數之前仍然應該從2開始找,因為他可能仍有2這個質因子,比如24=2*2*2*3,第一次找到2,第二次仍然要從2開始判斷它是不是24的約數。

有不明白的地方再提出來吧~

11樓:逃離

if(m%k!=0)

m=m/k; //這個程式應該是版

要輸出權,一個數包含哪幾個因子,所以要判斷除最小質因子後,那個數還有幾個因子。

k=2; //讓k重新等於2

} }printf("%d",k); //最後是輸出小於m=m/k 後k的值 例如12=2*2*3 那個3 因為那時的m=3 k=3 不滿足k

12樓:匿名使用者

#include

void main()

else i++;

}printf("\b \b");}

13樓:匿名使用者

#include "stdio.h"

int main()

printf("%d\n\n",j);

}i+=1;

}}while(n>0);}

14樓:

#include

int fenjie(heshu)

else

}return 0;

}int main() }

if (isprime==1)

return 0;}

15樓:匿名使用者

#include

#include

#include

int main()

;scanf("%d",&n);

if(n<=1) exit(0);

else if(n==2)

else

} } }

return 0;

}這個是算bai比較小du的數 大概思路就zhi是先篩選dao出質數專

集在遞迴從小屬到大除

16樓:慕容玄豫

#include "stdio.h"

void main()

else

}else

i++;}}

17樓:匿名使用者

這最佳答案輸出結果連x都沒有也能成最佳?

18樓:星月小木木

實現bai方du法zhi如dao下內:容

#include

void main( )

else i++;}}

19樓:匿名使用者

if((n%i==0)&&(i!=n))

這個來地方,i作為n的因數不一定只源出現一次所以bai

應該用duwhile迴圈,讓n=n/i直到無法除盡,zhi否則可能影響後面的因子

if((n%i==0)&&(i!dao=n))

20樓:冰封莊子

分解質因數,就是來

將一個合數自分解成幾個質數的乘積bai。

比如20=2*2*5

求質因數就du是從2開始除zhi,這就是這個算dao法的原理比如輸入20

能被2整除,

輸出20的第一個質因數2

此時m=10 ,k=2 //接著就是求10的質因數。。。

10能被2整除,

輸出20的第2個質因數2

此時m=5,k=2 //接著求5的質因數。。。

5是質數,不能被除1和他本身外的數整除,k就從2加到5。。。

後輸出20的最後一個質因數5

21樓:匿名使用者

你寫bai的du太zhi復dao雜專了屬

#include

void main( )

else i++;}}

c語言 分解質因數

22樓:高金山

這樣註釋的已經很好了啊

if(m%k!=0),說明還沒找到因數,每次都是從2開始,逐漸遞增,來找因數的

else,else部分,說明已經找到了因數,找到因數以後,先把因數列印出來,然後讓m等於被除後的數,讓k=2,也就是從2開始,繼續遞增找其他的因數啊

舉個例子,你就明白了,比如15,你要對它進行分解質因數,該怎麼做呢

先讓k=2,發現15%2!=0了,說明2不是它的因數,讓k++

k=3的時候,發現15%3==0了,說明3是它的一個因數,列印出3,讓m=15/3=5,讓k=2

5%2!=0,5%3!=0,5%4!=0,說明2,3,4,都不是5的因數,k繼續自加

k=5,5%5==0了,說明5是5的因數,所以,列印5,m=5/5=1,k=2,這時,就會退出for迴圈了

逐行分析,見下面:

if(m%k!=0) //m不能被k整除,說明k不是m的因數

else //m不能被k整除,說明k是m的一個因數

23樓:

#include "stdio.h"

int main()

printf("%d\n\n",j);

}i+=1;

}}while(n>0);}

24樓:

//#include "stdafx.h"//vc++6.0加上這一行.

#include "stdio.h"

bool prime(int n)

void main(void)

}for(i=0;a[i]!=-1;i++)printf("%d %d\n",j,n);}}}

14,18分解質因數,90的分解質因數是

14 2 7 18 2 3 3 分解質因數 每個合數都可以寫成幾個質數相乘的形式。其中每個質數都是這個合數的因數,叫做這個合數的分解質因數。分解質因數只針對合數。90的分解質因數是?40 90 九十 是89與91之間的一個自然數。90也是一個偶數。該數字可以表示年代。中文名九十 外文名ni y 大 ...

c語言問題,C語言問題

struct student拼寫成struct studnt了。拼寫錯誤 struct studnt沒有定義,所以無法執行sizeof。include typedef struct student int main c語言問題?嗯你的理解是對的,break就是用來跳出的switch,如果沒有brea...

c語言問題,c語言問題

首先你這個程式輸入個數是不可控的,n沒起到作用,因為你控制輸入的迴圈已經規定了i是從0到99,必須要輸入100個。而你這個 自認為統計總人數 的n n i,相當於n 1 2 3 那是不可能的。while xh i scanf d d xh i sg i n i sum sum sg i 用美元符號做...