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

C# 我有这段代码来查找在范围内的素数,请任何人告诉我为什么在嵌套循环中使用I=2?,c#,C#,我知道要更改嵌套for循环I=2中的值,程序不会给出素数结果。但我想知道只将2分配给I的原因和目的。如果有人用伪代码解释这一点,这也是一个加号 using System; namespace Prime_number { class Program { static void Main(string[] args) { int num, i, count, start, end; Console.

我知道要更改嵌套for循环
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");
        }
    }
}


使用系统;
名称空间素数
{
班级计划
{
静态void Main(字符串[]参数)
{
int num,i,count,start,end;
Console.Write(“输入范围的开始:”);
start=Convert.ToInt32(Console.ReadLine());
Console.Write(“输入范围结束:”);
end=Convert.ToInt32(Console.ReadLine());
Write(“介于{0}和{1}之间的素数是:\n”,开始,结束);

对于(num=start;num这是一个自解释的代码:

读取开始时的
范围
值。
读取
范围\u end
值。
对于从
范围开始
范围结束
的每个

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

除数
0
1
由于明显的原因没有被测试,所有的数字都可以被
1
整除,任何被
0
整除的数字都会给出相同的结果,在极限理论上是无穷大,在实际的CPU实现中是被零除的例外。只有小于
值/2
的数字才会被测试出同样明显的错误原因是,
value
不能被该范围内的任何数字整除,只能被其自身整除


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

It是一个自解释代码:

读取开始时的
范围
值。
读取
范围\u end
值。
对于从
范围开始
范围结束
的每个

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

除数
0
1
由于明显的原因没有被测试,所有的数字都可以被
1
整除,任何被
0
整除的数字都会给出相同的结果,在极限理论上是无穷大,在实际的CPU实现中是被零除的例外。只有小于
值/2
的数字才会被测试出同样明显的错误原因是,
value
不能被该范围内的任何数字整除,只能被其自身整除


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

因为没有点检查数字是否可被1整除。旁注:在该循环中也没有点检查偶数,如果“i”的初始值为0或一个代码因以下原因无法工作,则它们永远不会是素数(n=2除外)如果0:将给出被零除的错误2)如果1:每个值都将列出一个素数。例如4%1=0。旁注:与num/2的上限不同,更好的是Math.Sqrt(num)解释代码:如果给你一个数字(比如35或37)如何检查它是否为素数?->通过检查它是否可以被任何较小的数字(不包括1)除。在“num-1”之前,您可以停止检查它从2开始,因为没有点检查数字是否可以被1除。旁注:在该循环中也没有点检查偶数,它们永远不会是素数(除了n=2)如果“i”的初始值为0或一个代码因以下原因不起作用1)如果0:将给出除以零的错误2)如果1:每个值将列出一个素数。例如4%1=0。旁注:与num/2的上限不同,更好的是Math.Sqrt(num)作为解释代码的方法:如果给你一个数字(例如35或37)如何检查它是否为素数?->通过检查它是否可以被任何较小的数字(不包括1)除。并且可以在“num-1”之前停止检查