c - 计算从 1 到 n 的所有偶数平方的最快方法?

标签 c factors

我在 c 中做了这个:

#include<stdio.h>

int main (void)
{
 int n,i;

 scanf("%d", &n);

 for(i=2;i<=n;i=i+2)
 {
   if((i*i)%2==0 && (i*i)<= n)
      printf("%d \n",(i*i));
 }
 return 0;
}

解决这个问题的更好/更快的方法是什么?

最佳答案

让我不仅说明快速解决方案,还说明如何推导它。从列出所有方 block 的快速方法开始,然后从那里开始工作(伪代码):

max = n*n
i = 1
d = 3

while i < max:
    print i
    i += d
    d += 2

所以,从 4 开始,只列出偶数方 block :

max = n*n
i = 4
d = 5

while i < max:
    print i
    i += d
    d += 2
    i += d
    d += 2

现在我们可以缩短 while 循环结束时的困惑情况:

max = n*n
i = 4
d = 5

while i < max:
    print i
    i += 2 + 2*d
    d += 4

请注意,我们一直在使用 2*d,因此最好继续计算:

max = n*n
i = 4
d = 10

while i < max:
    print i
    i += 2 + d
    d += 8

现在请注意,我们不断添加 2 + d,因此我们可以通过将其合并到 d 中来做得更好:

max = n*n
i = 4
d = 12

while i < max:
    print i
    i += d
    d += 8

快如闪电。计算每个平方只需要两次加法。

关于c - 计算从 1 到 n 的所有偶数平方的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12340073/

相关文章:

r - 计算因子变量的计数总和,作为 R 中数据帧的子集

r - 计算一段时间内的因子水平

c - C 中的 SegFault 错误

c - SDL_WINDOWEVENT_ROTATE 结构

调用我调用一个函数来自动重置?

performance - 整数 n 的除数列表 (Haskell)

python - 使用Python递归函数求一个数的因数

c - 递归仅在使用断点或 getchar 时有效

c - 如何以编程方式实现特定 USB 设备的序列号和其他详细信息?

regex - 通过融合和 reshape 包重新使用 colsplit 正则表达式切割列