我想知道 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/2
到 Number
之后仍将保持素数。
使用此类限制的目的是通过减少循环次数来提高性能。
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
。因此 a
或 b
必须至少为 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.
您好,我有一个从特定范围获取质数的代码,我正在分析它,因为它来自互联网,我只是想知道 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/2
到 Number
之后仍将保持素数。
使用此类限制的目的是通过减少循环次数来提高性能。
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
。因此 a
或 b
必须至少为 2 或更大 。因此,您可以将上限设置为 Number/2
.
从素数理论我们知道,实际上如果 Number 在 sqrt(Number)
之前是一个素数,那么它在 sqrt(Number)
之后仍然是一个素数。从 source 可以读到:
If a number
n
is not a prime, it can be factored into two factorsa
andb
:n = a * b
Now
a
andb
can't be both greater than the square root ofn
, since then the producta * b
would be greater thansqrt(n) * sqrt(n) = n
. So in any factorization ofn
, at least one of the factors must be smaller than the square root ofn
, and if we can't find any factors less than or equal to the square root,n
must be a prime.