演算法 正整數分解為幾個連續自然數之和

2022-05-14 19:49:25 字數 578 閱讀 2547

題目:輸入乙個正整數,若該數能用幾個連續正整數之和表示,則輸出所有可能的正整數序列。

乙個正整數有可能可以被表示為n(n>=2)個連續正整數之和,如:

15=1+2+3+4+5

15=4+5+6

15=7+8

有些數可以寫成連續n(>1)個自然數之和,比如14=2+3+4+5;有些不能,比如8.那麼如何判斷乙個數是否可以寫成連續n個自然數之和呢?

乙個數m若可以寫成以a開頭的連續n個自然數之和,則m=a+(a+1)+(a+2)+…+(a+n-1)=n*a+n*(n-1)/2,要求a!=0,否則就是以a+1開頭的連續n-1個整數了,也就是要求(m-n*(n-1)/2)%n==0,這樣就很容易判斷乙個數可不可以寫成連續n個自然數的形式了,遍歷n=2…sqrt(m)*2,還可以輸出所有解。

void divide(int num)  

void divide(int num)

for(int k=i;k<=j;k++)

cout<>num;

divide(num);

return 0;

}

正整數分解為幾個連續自然數之和

題目 輸入乙個正整數,若該數能用幾個連續正整數之和表示,則輸出所有可能的正整數序列。乙個正整數有可能可以被表示為n n 2 個連續正整數之和,如 15 1 2 3 4 5 15 4 5 6 15 7 8 有些數可以寫成連續n 1 個自然數之和,比如14 2 3 4 5 有些不能,比如8.那麼如何判斷...

正整數分解為幾個連續自然數之和

題目 輸入乙個正整數,若該數能用幾個連續正整數之和表示,則輸出所有可能的正整數序列。乙個正整數有可能可以被表示為n n 2 個連續正整數之和,如 15 1 2 3 4 5 15 4 5 6 15 7 8 有些數可以寫成連續n 1 個自然數之和,比如14 2 3 4 5 有些不能,比如8.那麼如何判斷...

正整數分解為幾個連續自然數之和

題目 輸入乙個正整數,若該數能用幾個連續正整數之和表示,則輸出所有可能的正整數序列。乙個正整數有可能可以被表示為n n 2 個連續正整數之和,如 15 1 2 3 4 5 15 4 5 6 15 7 8 有些數可以寫成連續n 1 個自然數之和,比如14 2 3 4 5 有些不能,比如8.那麼如何判斷...