[問題] online judge 上一題如何加速運算?

作者: ddchris (克里斯)   2017-07-29 19:31:19
題目:
https://zerojudge.tw/ShowProblem?problemid=c226
程式碼(Code):(請善用置底文網頁, 記得排版)
http://codepad.org/AlD2neR4
補充說明(Supplement):
題目大意是對於某一正整數 N,
小於 N(1~ N-1)之連續正整數的和恰好等於 N 有幾組?
假設最小數字為 d 可能狀況為 d+(d+1)=N,d+(d+1)+(d+2)=N,
d+(d+1)+(d+2)+(d+3)=N 以下類推...
等同 2d+1=N,3d+(1+2)=N,4d+(1+2+3)=N ...
所以 (N-1)%2 ==0 或 (N-(1+2))%3 == 0 或...其中一項成立及代表一組解
程式碼跑起來也OK 但是時間超過了 online judge的限制,所以想問一下這邊大神們
是否有更有效率算法或加速的方式? 感恩!
程式新手還請鞭小力一點 > <
作者: Richun (解放左手的OO之力)   2017-07-29 20:00:00
從中位數來推呢? 連續n個相加=N 則中位m*n=N如果連續偶數個則中位數會是x.5 會變(2m+1)*n/2=N所以當(int)(2*N/n) * n = 2*N時,會有連續正整數之和=N連續n個數相加最小為n*(n+1)/2,當>N時就可以結束迴圈了
作者: Littlechozy (キミに100%)   2017-07-29 21:10:00
從d開始加n項的結果是n(d+(n-1)/2)=N所以項數n必須是N的因數而且是偶數\
作者: Richun (解放左手的OO之力)   2017-07-29 21:14:00
上面推的有點bug n不限於偶數 而若n是奇數則n必是N的因數n是偶數則(n/2)必是N的因數稍微推了一下發現這好像等同於求質因數的個數
作者: Littlechozy (キミに100%)   2017-07-29 21:38:00
寫錯了,是n-1要是偶數,因為(n-1)/2要是整數
作者: s25g5d4 (function(){})()   2017-07-29 21:44:00
剛好版主不在,提醒一下你這篇應該發在 Prob_Solve
作者: chuegou (chuegou)   2017-07-30 10:52:00
(N-(1+2))%3 == 0 這是不是跟 N%3 == 0 一樣?
作者: kevin85421 (安安)   2017-07-30 12:43:00
先做質因數分解,找因數是否為合法中位數(略過偶數)。再找所有偶數除以N是否為合法中位數。
作者: longlongint (華哥爾)   2017-07-30 13:37:00
N 會大到 10^18, 基本上只能推公式來解了因為 CPU 時脈一般是 GHz 等級的不過上面很多人把解法推完了QQ然後時間限制問題 現實中只要老闆問你明天跑不跑得完 可以回答是跟否就夠了......
作者: fatrabitree (胖兔子)   2017-07-30 16:24:00
n-3是3的倍數->n是三的變數吧
作者: Sanvean   2017-07-30 21:52:00
這個問題好像可以變成所有奇因數的個數再減一也就是說先把數字除 2 除到變奇數,再質因數分解算因數個數,最後減一。不知道有沒有比較快的演算法XD
作者: noodleT (麵T)   2017-07-31 00:06:00
超過時間限制在軟體工作是會遇到的,比如說路徑搜尋。就空間(記憶體)與時間的取捨
作者: HolyBugTw (HolyBug)   2017-08-01 11:13:00
乍看好像是求有幾個質因數的變體所以就先質因數分解,然後指數加1相乘?300=2^2*3*5^2 => 2倍數不看 => (1+1)*(2+1)-1=5

Links booklink

Contact Us: admin [ a t ] ucptt.com