問題描述:
大部分正整數可以表示2個以上連續整數之和。如:6=1+2+3,9=5+4=2+3+4;
實驗任務:
連續整數和問題要求計算給定的正整數可以表示為多少個2以上連續整數之和。
解題過程:
乙個數m若可以寫成以a開頭的連續n個自然數之和,則m=a+(a+1)+(a+2)+…+(a+n-1)=n*a+n*(n-1)/2,要求a>=1,否則就是以a+1開頭的連續n-1個整數了,也就是要求(m-(n*(n-1)/2))除於n大於等於1,(m-(n*(n+1)/2))%n==0,這樣就很容易判斷乙個數可不可以寫成連續n個自然數的形式了,遍歷n=2…sqrt(2*m+0.25)-0.5,還可以輸出所有解。
1 #include2 #include3view code4int ans=0;5
void find(intx)6
22}23}
24}25int
main()
2634
return0;
35 }
通過程式設計實驗發現,除了2^n以外,其餘所有數都可以寫成該形式。下面說明為什麼。
若數m符合條件,則有m=a+(a+1)+(a+2)+…+(a+n-1)=(2*a+n-1)*n/2,而2*a+n-1與n肯定乙個為奇數乙個為偶數,即m一定要有乙個奇數因子,而所有2^n都沒有奇數因子,因此肯定不符合條件。
可以證明,只要m有乙個奇數因子,就一定可以寫成連續n個自然數之和。
連續整數和問題
問題描述 大部分的正整數可以表示為2個以上連續整數之和。如6 1 2 3,9 4 5 2 3 4.你的任務是求出給定正整數可以表示為多少個2個以上連續整數之和。思路 令輸入的數為n,i 1,j i i,sum i,j m n 2 1 在3個之中迴圈。直到不滿足條件為止。條件 i j j 1.若sum...
連續正整數問題
題目描述 乙個正整數有可能可以被表示為 n n 2 個連續正整數之和,如 15 1 2 3 4 5 15 4 5 6 15 7 8 請編寫程式,根據輸入的任何乙個正整數,找出符合這種要求的所有連續正整數序列。輸入資料 乙個正整數,以命令列引數的形式提供給程式。輸出資料 在標準輸出上列印出符合題目描述...
遞迴 求連續整數和
題目 輸入乙個正數n,輸出所有和為n連續正數序列。例如輸入15,由於1 2 3 4 5 4 5 6 7 8 15,所以輸出3個連續序列1 5 4 6和7 8。解題思路 首先,要找的肯定是小於等於n 2 1的數。那麼我們就可以從n 2 1開始向下每個數遞迴尋找,如果找到合適的情況,那麼久輸出即可。遞迴...