Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
C 区分两个数组索引?_C_Arrays_Primes - Fatal编程技术网

C 区分两个数组索引?

C 区分两个数组索引?,c,arrays,primes,C,Arrays,Primes,我的数组有问题。我从一本书中复制了以下代码: #include <stdio.h> #include <stdbool.h> int main (void) { int p, i, primes[50], primeIndex = 2; bool isPrime; primes[0] = 2; primes[1] = 3; for (p = 5; p <= 50; p = p + 2) {

我的数组有问题。我从一本书中复制了以下代码:

#include <stdio.h>
#include <stdbool.h>

int main (void)
{
    int     p, i, primes[50], primeIndex = 2;
    bool    isPrime;

    primes[0] = 2;
    primes[1] = 3;

    for (p = 5; p <= 50; p = p + 2) {
        isPrime = true;

        for (i = 1; isPrime && p / primes[i] >= primes[i]; ++i)
            if (p % primes[i] == 0)
                isPrime = false;

        if (isPrime == true) {
            primes[primeIndex] = p;
            ++primeIndex;
        }
    }

    for (i = 0; i < primeIndex; ++i)
        printf ("%i ", primes[i]);

    printf ("\n");

    return 0;
}
#包括
#包括
内部主(空)
{
int p,i,素数[50],素数指数=2;
bool-isPrime;
素数[0]=2;
素数[1]=3;
对于(p=5;p=primes[i];++i)
如果(p%素数[i]==0)
isPrime=false;
if(isPrime==true){
素数[primeIndex]=p;
++素数指数;
}
}
对于(i=0;i

特别是,我很难理解
primeIndex
I
变量之间的区别。
primeIndex
表示数组编号,
i
表示放入数组的编号。对吗?

primeIndex
是在
prime
数组中写入下一个找到的素数的位置,也是到目前为止已知的素数
i
是用于试验划分的素数索引。对于每个候选项,
i
从1(我们不需要尝试
primes[0]=2
,因为只检查奇数)循环到大于候选项平方根的第一个素数的索引。

primeIndex
是在
prime
数组中写入下一个找到的素数的位置,还有到目前为止已知的素数
i
是用于试验划分的素数索引。对于每个候选项,
i
从1(我们不需要尝试
primes[0]=2
,因为只检查奇数)循环到大于候选项平方根的第一个质数的索引。

有人知道此算法的名称吗?请注意,当您设置
isPrime=false,您还可以明智地添加一个
中断
(并用大括号
{…}
)提前终止循环。更糟糕的是:整个布尔(循环不变量+1/2)
isPrime
可以通过goto消除,add-to数组可以压缩为
primes[primeIndex++]=p顺便说一句,
p@bacchus,它是一个试验部门。只使用找到的素数来避免无意义的除法。有人知道这个算法的名称吗?请注意,当您设置
isPrime=false,您还可以明智地添加一个
中断
(并用大括号
{…}
)提前终止循环。更糟糕的是:整个布尔(循环不变量+1/2)
isPrime
可以通过goto消除,add-to数组可以压缩为
primes[primeIndex++]=p顺便说一句,
p@bacchus,它是一个试验部门。只是用找到的素数来避免无意义的除法。我现在明白了区别。但是看看计算机执行的第一个p数,即5,循环不会终止吗?因为5/3小于3?内部循环,它测试
p
是否是素数。然后,由于
isPrime
未设置为false,因此将5写入
prime
数组中
primeIndex
(2),
primeIndex
递增,外部循环进入下一轮,将2添加到
p
,从而检查7。再次,内部循环立即结束,
primes[3]=7
,外部循环使用
p=9
…我现在理解了区别。但是看看计算机执行的第一个p数,即5,循环不会终止吗?因为5/3小于3?内部循环,它测试
p
是否是素数。然后,由于
isPrime
未设置为false,因此将5写入
prime
数组中
primeIndex
(2),
primeIndex
递增,外部循环进入下一轮,将2添加到
p
,从而检查7。再次,内部循环立即结束,
素数[3]=7
,外部循环为
p=9
。。。