# re: 表正整数n为连续整数的条件和方法 回复 更多评论
2009-01-19 23:51 by
# re: 表正整数n为连续整数的条件和方法 回复 更多评论
2009-01-22 10:45 by
good.
实现倒是不难, 关键是怎么样让它执行次数最少,至少是比较少。
# re: 表正整数n为连续整数的条件和方法 回复 更多评论
2010-08-11 10:59 by
网上讲连续整数和问题的博文很多,但博主这篇最讲的最明白,赞一个~~~
我按照楼主论文提供的方法写了一个,代码如下,其循环次数为O(n/4),相比之下还是楼主的方法更快些,循环次数为O(sqrt(2n)),
void ContinueInt(int n)
{
int i, k, m, num=0;
for(i=3; i<n/2+1; i +=2) //以步长为2从3开始到n/2为止,求n的所有奇数因子
{
if(n%i == 0)
{
++num;
m = n/i;
k = (i-1)/2;
for(int j=(m-k>0)?(m-k):(k-m+1); j<=m+k; ++j) //利用论文中的结论
cout<<j<<" "; //即n=(2k+1)*m=(2k+1)*2m/2=(2k+1)(m-k+m+k)/2
cout<<endl;
}
}
if(n%2)//n本身是奇数
{
++num;
cout<<(n-1)/2<<" "<<(n-1)/2+1<<endl;
}
cout<<"in all, num="<<num<<endl;
}