[问题] 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