我知道要更改嵌套循环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_start
到range_end
的每个value
检查
value
是否可被2
到value
的一半范围内的任何数字整除
如果它不可整除,它将是素数。
除数0
和1
由于明显的原因没有被测试,所有的数字都可以被1
整除,并且任何被0
整除的数字都会给出相同的结果,在极限理论中是无穷大,或者在实际的CPU实现中是被零整除。只有value / 2
以下的数字才被测试,原因也很明显,value
不能被该范围内的任何数字整除,只能被它自己整除。
EDIT:在处理整数值时,一个小的优化是使用value >> 1
而不是value / 2
,在CPU级别,shift
运算比div
运算快得多,但编译器通常在编译时已知除数时应用此优化。