題目:輸入乙個正整數,若該數能用幾個連續正整數之和表示,則輸出所有可能的正整數序列。
乙個正整數有可能可以被表示為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(intnum)
void divide(intnum)
for(int k=i;k<=j;k++)
cout<
cout<
}intmain()
{intnum;
cout<
cin>>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.那麼如何判斷...