【发布时间】:2014-07-17 05:47:22
【问题描述】:
我已经编写了这个 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);
}
}
【问题讨论】:
-
为什么它应该在不到 1 秒的时间内运行?现在需要多长时间,因为在另一台机器上会有所不同?
-
n=100000 耗时超过 2s。
-
您是否启用了编译器优化?
-
其实这是一个关于spoj的问题,显示的时间限制已经超出。
-
你一开始就应该说这是一个 SPOJ 问题,你应该给出 URL。此外,有许多网页为此类问题提供解决方案。老实说,你真的用谷歌搜索过吗?
标签: c performance optimization