C# 数范围内的素数因子
我尝试在VisualStudio中运行此代码。它不输出任何东西,运行无限循环C# 数范围内的素数因子,c#,C#,我尝试在VisualStudio中运行此代码。它不输出任何东西,运行无限循环 private void calculateButton_Click(object sender, EventArgs e) { int startNumber, endNumber, counter, num; startNumber = Convert.ToInt32(minValue.Text); endNumber
private void calculateButton_Click(object sender, EventArgs e)
{
int startNumber, endNumber, counter, num;
startNumber = Convert.ToInt32(minValue.Text);
endNumber = Convert.ToInt32(maxValue.Text);
int startNumCounter = startNumber;
for (num = startNumCounter; num <= endNumber; num++)
{
counter = 0;
int numCurrent = num;
for (int i = 2; i <= num; i++)
{
if (numCurrent % i == 0)
{
output.Text += " " + i + " ";
num = num / i;
counter++;
}
if (counter != 0 && num >= 2)
output.Text = "Factors: " + num;
}
}
}
}
}
private void calculate按钮点击(对象发送者,事件参数e)
{
int startNumber,ENDNAMER,计数器,num;
startNumber=Convert.ToInt32(minValue.Text);
endNumber=Convert.ToInt32(maxValue.Text);
int startNumCounter=startNumber;
对于(num=startNumCounter;num这是我想到的代码:
private void calculateButton_Click(object sender, EventArgs e)
{
int startNumber, endNumber, counter, num;
startNumber = Convert.ToInt32(minValue.Text);
endNumber = Convert.ToInt32(maxValue.Text);
int startNumCounter = startNumber;
for (num = startNumCounter; num <= endNumber; num++)
{
output.Text += $"Factors {num}:";
counter = 0;
int numCurrent = num;
for (int i = 2; i <= numCurrent; i++)
{
bool continueToNexti = false;
while (!continueToNexti)
{
if (numCurrent % i == 0)
{
output.Text += $" {i} ";
numCurrent = numCurrent / i;
counter++;
}
else
{
continueToNexti = true;
}
}
}
output.Text += Environment.NewLine;
}
}
应该是什么
numCurrent = numCurrent / i;
此外,我还提出了一个额外的循环,While循环,来解释一个数字可以被同一个因子多次除的事实
为了加快速度,我改变了
for (int i = 2; i <= num; i++)
for(int i=2;inum=num/i;
减少循环变量,而不是增加它,这是结束外部for
循环所需的。我能做些什么来解决此问题?重写循环,使其收敛到零(或任何下限),或更改更改num
的方式,使其向上收敛到当前循环限制。我想补充一点——一般来说,为循环变量修改是非常不寻常的。如果您发现自己需要这样做,则在时将其重写为。如果我不想打印prime numb在这个范围内,我会在与bool Nexti相同的区域添加另一个bool语句吗?例如,min:7和max:10。现在7是素数,除了它本身和1之外没有其他因子,所以我不会打印它。所以我会将bool istime设置为true,然后说如果bool isPrime==false,out.textbox=$“factors{num}:”;
for (int i = 2; i <= num; i++)
for (int i = 2; i <= numCurrent; i++)