luogu p1147 連續自然數和

2022-02-15 12:28:57 字數 1850 閱讀 1233

傳送門

對乙個給定的自然數\(m\),求出所有的連續的自然數段,這些連續的自然數段中的全部數之和為\(m\)。

例子:\(1998+1999+2000+2001+2002 = 10000\),所以從\(1998\)到\(2002\)的乙個自然數段為\(m=10000\)的乙個解。

包含乙個整數的單獨一行給出m的值(\(10 \le m \le 2,000,000\))。

每行兩個自然數,給出乙個滿足條件的連續自然數段中的第乙個數和最後乙個數,兩數之間用乙個空格隔開,所有輸出行的第乙個按從小到大的公升序排列,對於給定的輸入資料,保證至少有乙個解。

10000
18 142

297 328

388 412

1998 2002

這道題在試煉場的數論部分,但我死活沒看出來這道題怎麼數論(還是太菜,,),於是就寫了個暴力,ac了。

???????

於是我開啟了題解區,然後就看到了題解區的第一位神仙@突然頹廢 ,瞬間茅塞頓開。(我太菜了啊啊啊啊

以下是數學方法:

設首項為\(l\),末項為\(r\),那麼顯然

\[\sum_^ri = (l+r)(r-l+1)/2\\

2\sum_^ri = (l+r)(r-l+1)\]

若\[\begink_1 = r - l + 1\\k_2 = l + r\end

\]解這個引數為\(k_1, k_2\)的二元一次方程組:

\[\beginl=\dfrac\\\\r=\dfrac\end

\]回到開始,因為

\[2\sum_^ri = (l+r)(r-l+1)

\]所以

\[2\sum_^ri = k_1k_2

\]這樣,\(k_1\)在\(1 \sim \sqrt\)的區間列舉,能保證可以列舉到每乙個解,而且\(k_2,l,r\)都可以算出來。

而且我們可以發現,只有當 \(k_1\not \equiv k_2\pmod\)的時候,\(l\)和\(r\)才會有整數解。原因很簡單,如果 \(k_1\equiv k_2\pmod\),顯然無論是\(k_1 + k_2\)還是\(k_2 - k_1\),結果都是偶數,再\(\pm1\)就變成了奇數,除以2就不是整數了,所以\(k_1\)和\(k_2\)必須一奇一偶。

但是請注意還有一種情況,\(l = r\) ,這在題目中是不允許的行為,在程式中我們應該排除。列不等式:

\[l \neq r\\\dfrac \neq \dfrac\\k_2-k_1+1 \neq k_1+k_2-1\\1-k_1 \neq k_1 - 1\\k_1 \neq 1

\]也就是說,\(k_1\)應該在\(2 \sim \sqrt\)列舉才對。

不得不說這個方法是真的妙!

這種演算法的時間複雜度是\(o(\sqrt)\)。

我寫的辣雞暴力:

/*

* @author: crab-in-the-northeast

* @date: 2020-02-26 02:34:12

* @last modified by: crab-in-the-northeast

* @last modified time: 2020-02-26 03:46:31

*/#include #include int main()

return 0;

}

神仙數學解法(純手打,樣例過了):

#include #include #include #include int main()
ac 100:r31068037

luogu P1147 連續自然數和

對乙個給定的自然數m,求出所有的連續的自然數段,這些連續的自然數段中的全部數之和為m。例子 1998 1999 2000 2001 2002 10000,所以從1998到2002的乙個自然數段為m 10000的乙個解。輸入格式 包含乙個整數的單獨一行給出m的值 10 m 2,000,000 輸出格式...

洛谷1147 連續自然數和

對乙個給定的自然數m,求出所有的連續的自然數段,這些連續的自然數段中的全部數之和為m。例子 1998 1999 2000 2001 2002 10000,所以從1998到2002的乙個自然數段為m 10000的乙個解。輸入輸出格式 輸入格式 包含乙個整數的單獨一行給出m的值 10 m 2,000,0...

P1147 連續自然數和

對乙個給定的自然數m,求出所有的連續的自然數段,這些連續的自然數段中的全部數之和為m。例子 1998 1999 2000 2001 2002 10000,所以從1998到2002的乙個自然數段為m 10000的乙個解。輸入格式 包含乙個整數的單獨一行給出m的值 10 m 2,000,000 輸出格式...