程序适用于所有输入,除了一个(素数检查器)

时间:2018-04-04 01:29:06

标签: c# primes

我是C#的新手,我正在尝试学习新的概念,所以我做了一个素数检查器。它可能没那么高效,但我很高兴它有效。但是,每当我输入数字4时,它都不起作用。在所有其他数字上,但它在4上没有。这是我的代码:

            float prime = Convert.ToSingle(Console.ReadLine());
            float divisor = prime - 1;
            float checker = prime / divisor;
            do
            {
                Console.WriteLine("checker = " + checker);
                checker = prime / divisor;
                --divisor;
            } while (checker % 1 != 0 && divisor >= 0);

            if (divisor < 1)
            {
                Console.WriteLine("{0} is a prime number.", prime);
            }
            if (checker % 1 == 0 && divisor > 1)
            {
                Console.WriteLine("{0} is not a prime number.", prime);
            }

2 个答案:

答案 0 :(得分:0)

你的逻辑是错误的:

checker = prime / divisor;

checker = 4/2 =&gt; 2

while (checker % 1 != 0 && divisor >= 0)

2%1 = 0 - 退出循环 您还有2个If条件(为什么不是&amp; else)。 Second If条件与循环结束条件不匹配。

这是我的逻辑:

float input = Convert.ToSingle(Console.ReadLine());
float factor1 = 2;
float factor2 = 0;
bool isPrime = true;

for(; factor1 < input; factor1++)
{
    factor2 = input / (float)factor1;

    if((int)factor2 == factor2)
    {
        isPrime = false;                    
        break;
    }
}

if(isPrime)
{
    Console.WriteLine($"{input} is prime.");
}
else
{                
    Console.WriteLine($"{input} is not prime. {factor1} * {factor2} = {input}");
}

答案 1 :(得分:0)

您的if语句条件均未满足4.将第二个if语句更改为else,以便在第一个语句未执行时{{1}的逻辑语句总是执行。

else