Eratosthenes筛c程序-为什么我们有i<=sqrt(n)等?
我想这更像是一个数学问题,但它与编程有很大关系,所以我想我应该试一试。下面是我的代码链接,该程序使用Eratosthenes的筛子计算C中的素数列表:Eratosthenes筛c程序-为什么我们有i<=sqrt(n)等?,c,C,我想这更像是一个数学问题,但它与编程有很大关系,所以我想我应该试一试。下面是我的代码链接,该程序使用Eratosthenes的筛子计算C中的素数列表: 我的问题是,在程序开头的for循环中,为什么我们有i或者n=a*a,或者n=b*c,其中b
我的问题是,在程序开头的for循环中,为什么我们有i或者
n=a*a
,或者n=b*c
,其中b
。因此,我们只需要检查a
-直到a*a
的平方根的值,就可以找到a
或b
。如果我们找到b
,那么我们就知道c
(asc=n/b
)
num必须是:num=a*b
a和b中的一个必须低于sqrt(n)
因此,在程序开始之前,它已经减小到数字sqrt(n)
因此,无需判断sqrt(n)上的数字
对于(j=2;i*j ii,请注意,如果您已经知道i*i
的值,(i+1)*(i+1)
的值很容易计算为i*i+2*i+1
(没有任何乘法)。@R..您的第一个音符仅与第二个音符一起有意义,但即使如此,sqrt(n)
可以完全从循环中提升出来,而计算i*i的下一个值仍然需要在循环中添加一个值。
for(j = 2 ; i * j <= n ; j++)
{
primecap[j * i] = FALSE;
}