我想知道 for 循环 for(i=2; i<=Number/2; i++) 的解释是什么

I wonder what's the explanation of the for loop for(i=2; i<=Number/2; i++)

您好,我有一个从特定范围获取质数的代码,我正在分析它,因为它来自互联网,我只是想知道 for 循环是什么 for(i=2; i<=number/2; i++);。为什么它以两个开头,i<=number/2 是条件的背后原因是什么。下面是完整的代码,希望你能帮到我。

#include <stdio.h>
 
int main()
{
  int i, Number, count, Minimum, Maximum; 

  printf("\n Please Enter the Minimum & Maximum Values\n");
  scanf("%d %d", &Minimum, &Maximum);
 
  printf("Prime Numbers Between %d and %d are:\n", Minimum, Maximum);  
  for(Number = Minimum; Number <= Maximum; Number++)
  {
    count = 0;
    for (i = 2; i <= Number/2; i++)
    {
      if(Number%i == 0)
      {
    count++;
    break;
      }
    }
    if(count == 0 && Number != 1 )
    {
       printf(" %d ", Number);
    }  
  
  }
  return 0;
}

2 是合数的最小可能因子(记住,1 是素数的因子)。

Number/2 是最小因子的上限。我说 一个 上限,因为更好的界限是 sqrt(Number)。推理:任何大于 √N 的因子 p 必须有一个相应的因子 q = N/p 必须小于 √N.

for 循环必须遵循特定的结构。

第一个语句 (i=2) 声明计数器必须从 2 开始。第二个语句 (i <= Number/2) 表示当该语句为真时循环将继续。每次循环运行时,最终语句 (i++) 都会将变量 i 递增 1。

所以在这个例子中,i 从 2 开始,然后每次增加 1,直到 i 大于 Number,然后再继续程序的其余部分。

for (Number = Minimum; Number <= Maximum; Number++)
# This for loop is traversing all numbers in the range of the minimum and maximum number

for (i = 2; i <= Number / 2; i++)
# This for loop is checking if the number is divisible by any number starting from 2

例如,这可用于检查数字是否为质数。

i <= Number / 2为循环条件

如果Number = 11那么这个for循环将从2开始跳数。所以i的值将从2变为Number / 2,这是5.

这通过减少所需的迭代次数提高了循环的性能。

首先,2是复合的最低因子,而Number/2是从2开始到Number/2的条件的最高极限。我们可以在 Number/2 处停止,因为如果 Number 是素数,那么它在 Number/2Number 之后仍将保持素数。

使用此类限制的目的是通过减少循环次数来提高性能。

Why does it start with two and what's the reason behind why i<=number/2

下限和上限与性能有关 即, 减少您需要计算的迭代次数。

开始于 2 because:

A prime number (or a prime) is a natural number greater than 1

它以 Number/2 结尾,因为如果 Number 在 Number/2 之前是质数,那么在那之后仍然是质数。

原因如下,“如果一个数n不是素数,它可以分解成两个因数”所以Number = a * b。因此 ab 必须至少为 2 或更大 。因此,您可以将上限设置为 Number/2.

从素数理论我们知道,实际上如果 Number 在 sqrt(Number) 之前是一个素数,那么它在 sqrt(Number) 之后仍然是一个素数。从 source 可以读到:

If a number n is not a prime, it can be factored into two factors a and b:

n = a * b

Now a and b can't be both greater than the square root of n, since then the product a * b would be greater than sqrt(n) * sqrt(n) = n. So in any factorization of n, at least one of the factors must be smaller than the square root of n, and if we can't find any factors less than or equal to the square root, n must be a prime.