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;
}
这是我作为一个学校任务制作的欧拉斯托特的代码。该计划似乎运行良好,但仍然缓慢。我怎样才能让它更快?Euler Totient:优化
你是否介绍了密码?你知道瓶颈在哪里吗? – Floris
你应该在进入循环之前初始化'b'?它在被赋值之前在'if(b!= div)'行被访问。可能不是缓慢的原因...你能给我们一个预期的vs实际速度的想法吗?你有没有尝试用'-O3'标志编译? – Floris
速度有多慢?它需要多快? – DaV