【发布时间】:2013-11-01 12:36:00
【问题描述】:
int main(void)
{
int n, div, a, b;
double phi;
printf("Enter n:\n");
if (scanf("%d", &n) < 1 || n <= 0)
{
printf("Wrong input.\n");
return 1;
}
a = n;
div = 2;
phi = n;
while (n != 1)
{
if (n % div != 0)
div++;
else
{
n = n / div;
if (b != div)
{
b = div;
phi = phi * (1.0 - 1.0 / div);
}
}
}
printf("phi(%d) = %.f\n", a, phi);
return 0;
}
这是我作为学校作业制作的 Eulers Totient 代码。该程序似乎运行良好,但仍然很慢。请问我怎样才能让它更快?
【问题讨论】:
-
您是否分析了代码?你知道瓶颈在哪里吗?
-
是否应该在进入循环之前初始化
b?它在被赋值之前在if(b!=div)行中被访问。可能不是慢的原因......你能给我们一个预期与实际速度的想法吗?您是否尝试使用-O3标志进行编译? -
慢有多慢?它需要多快?
-
C 中的变量不像 BASIC 中的变量——仅仅因为你没有明确地给它们一个值并不意味着它们有一个值(即它们被赋予的内存位置的内容:“无论如何孩子在学年结束时留在储物柜里的东西还在那里,直到你把它清理干净并把自己的东西放进去”)
标签: c optimization