有些數可以寫成連續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,還可以輸出所有解。
第二個問題是什麼樣的數可以寫成連續n個自然數之和,什麼樣的數不能?
通過程式設計實驗發現,除了2^n以外,其餘所有數都可以寫成該形式。下面說明為什麼。
只要m有乙個奇數因子,就一定可以寫成連續n個自然數之和。
首先只要是乙個奇數,均滿足條件(n=2)
任何乙個自然數m的立方均可以寫成m個連續的奇數之和的程式
任何乙個自然數m的立方均可以寫成m個連續的奇數之和
m^3 = a1+a2+...+am;
已知a1,a2,...,am是連續的奇數
那麼a1+a2+...+am = (a1 + am)*m/2(這個是等差數列和公式)
a1,a2,...,am是連續的奇數am = a1 + 2*m - 2;這個是必然的,你可以任意驗證
所以m^3 = (a1 + am)*m/2 = (a1 + m - 1)*m
所以就是
a1 = m * m - m + 1
自然數M拆分為連續自然數之和
有些數可以寫成連續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開頭...
自然數拆分
描述 description 輸入自然數n,然後將其拆分成由若干數相加的形式,參與加法運算的數可以重複。輸入格式 inputformat 輸入只有乙個整數n,表示待拆分的自然數n。n 80 輸出格式 outputformat 輸出乙個數,即所有方案數 樣例輸入 sampleinput 複製資料 7 ...
自然數拆分
問題描述 自然數的拆分 任何乙個大於1的自然數n,總可以拆分成若干個自然數之和,並且有多種拆分方法。試求 n的所有拆分。例如自然數5,可以有如下一些拆分方法 5 1 1 1 1 1 5 1 1 1 2 5 1 2 2 5 1 4 5 2 3 注意,本題中n拆分出來的數x的範圍是1 x整數劃分可以參考...