C# 我有这段代码来查找在范围内的素数,请任何人告诉我为什么在嵌套循环中使用I=2?
我知道要更改嵌套for循环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.
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”之前停止检查