Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eratosthenes筛c程序-为什么我们有i<=sqrt(n)等?_C - Fatal编程技术网

Eratosthenes筛c程序-为什么我们有i<=sqrt(n)等?

Eratosthenes筛c程序-为什么我们有i<=sqrt(n)等?,c,C,我想这更像是一个数学问题,但它与编程有很大关系,所以我想我应该试一试。下面是我的代码链接,该程序使用Eratosthenes的筛子计算C中的素数列表: 我的问题是,在程序开头的for循环中,为什么我们有i或者n=a*a,或者n=b*c,其中b

我想这更像是一个数学问题,但它与编程有很大关系,所以我想我应该试一试。下面是我的代码链接,该程序使用Eratosthenes的筛子计算C中的素数列表:


我的问题是,在程序开头的for循环中,为什么我们有i或者
n=a*a
,或者
n=b*c
,其中
b
。因此,我们只需要检查
a
-直到
a*a
的平方根的值,就可以找到
a
b
。如果我们找到
b
,那么我们就知道
c
(as
c=n/b

  • 如果一个数字(名为num)num>sqrt(n)且不是素数
    num必须是:num=a*b
    a和b中的一个必须低于sqrt(n)
    因此,在程序开始之前,它已经减小到数字sqrt(n)
    因此,无需判断sqrt(n)上的数字
  • 您可以这样编写代码

  • 对于(j=2;i*j i
    i,请注意,如果您已经知道
    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;
    }