我有这个代码来查找范围内的素数,请任何人告诉我为什么在嵌套循环中使用I=2



我知道要更改嵌套循环i=2中的值,程序不会以素数给出结果。但我想知道只将2分配给i的原因和目的。如果有人用伪代码解释这一点,也是一个加号。

using System;
namespace Prime_number
{
class Program
{
static void Main(string[] args)
{
int num, i, count, start, end;
Console.Write("Enter Start of range: ");
start = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter End of range : ");
end = Convert.ToInt32(Console.ReadLine());
Console.Write("The prime numbers between {0} and {1} are : n", start, end);
for (num = start; num <= end; num++)
{
count = 0;
for (i = 2; i <= num / 2; i++)
{
if (num % i == 0)
{
count++;
break;
}
}
if (count == 0 && num != 1)
Console.Write(num + "n");
}
Console.Write("n");
}
}
}

这是一个不言自明的代码:

读取range_start
读取range_end
对于从range_startrange_end的每个value

检查value是否可被2value的一半范围内的任何数字整除
如果它不可整除,它将是素数。

除数01由于明显的原因没有被测试,所有的数字都可以被1整除,并且任何被0整除的数字都会给出相同的结果,在极限理论中是无穷大,或者在实际的CPU实现中是被零整除。只有value / 2以下的数字才被测试,原因也很明显,value不能被该范围内的任何数字整除,只能被它自己整除。

EDIT:在处理整数值时,一个小的优化是使用value >> 1而不是value / 2,在CPU级别,shift运算比div运算快得多,但编译器通常在编译时已知除数时应用此优化。

最新更新