c - 优化此代码,使其代码运行时间小于 1s

标签 c performance optimization

我写了这个c程序。这运作良好。我想要非常大的值,例如 1000000。这应该在不到 1 秒的时间内运行。

该程序生成 n>1 的序列。 a[0]=a[1]=0 且 a[n]=a[n-1]+f(n),其中 f(n) 是 n 的最小素因数。

#include<stdio.h>
int fn(long no)
{
    long i;
    for (i = 2; i <= no; i++)
    {
        if (no % i==0)
        {
            return i;
            break;
        }
    }
}

int main(void)
{
    int t,i;
    long n,a1,j;
    scanf("%d",&t);

    for(i=0;i<t;i++)
    {
        a1=0;
        scanf("%ld",&n);
        for(j=2;j<=n;j++)
        {
            a1 = a1 + fn(j);

        }
     printf("%d\n",a1);
    }
}

最佳答案

只需进行如下修改,您就会看到很大的差异:

#include<math.h>

int fn(long no)
{
    long i;
    int sqrtno= (int)sqrt((double)no);
    for (i = 2; i <= sqrtno; i++)
    {
        if (no % i==0)
        {
            return i;
        }
    }

    return no;
}

当达到no的平方根时,无需继续寻找除数,因为当一个除数大于此时,另一个就较小。

关于c - 优化此代码,使其代码运行时间小于 1s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23904242/

相关文章:

c - netstat如何知道接收和发送的字节数?

C字符数组及其长度

c - OS X 上 C 标准库的线程安全

css - #parent>*/asterisk 与#parent>div

gwt - 如果基本,示例GWT应用程序需要30秒才能加载到浏览器中,这正常吗?真正的应用程序需要2分钟吗?

c++ - 从源代码编译与 deb 包编译

python - 一个字母游戏问题?

c - 如何将结构体传递给函数来分配内存

java - 在 Java 与 C++ 中读取二进制文件

jquery - 如何测试图像是否已在缓存中?