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

2021-07-15 17:20:46 字數 748 閱讀 6025

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

乙個正整數有可能可以被表示為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*(n-1)/2))%n==0,即(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;

}

問題:是不是所有的正整數都能分解為連續正整數序列呢?

答案不是。並不是所有的正整數都能分解為連續的正整數和,通過程式設計實驗發現,除了2^n以外,其餘所有數都可以寫成該形式。

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

題目 輸入乙個正整數,若該數能用幾個連續正整數之和表示,則輸出所有可能的正整數序列。乙個正整數有可能可以被表示為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.那麼如何判斷...