【问题标题】:Prime Number Verifier Code Blocks resturns me converting problems in C#Prime Number Verifier Code Blocks 返回我在 C# 中的转换问题
【发布时间】:2021-07-13 12:04:58
【问题描述】:
static void Main(string[] args)
        {
            if (isPrimeNumber(6))
            {
                Console.WriteLine("This is prime number");  
            }
            else
            {
                Console.WriteLine("This is not prime number");
            }
            Console.ReadLine();
        }
 

        private static bool isPrimeNumber(int number)
        {
            bool result = true;
            for (int i = 0; number - 1; i++)
            {
                if (number % i == 0)
                {
                    result = false;
                    i = number;
                }

            }
            return result;
        }

嘿!我的代码块中存在关于素数验证的问题。该程序在 for 循环中返回给我:无法将类型“int”转换为“bool”。我该如何解决?我怎么了?

【问题讨论】:

    标签: c# type-conversion primes


    【解决方案1】:

    for (int i = 0; number - 1; i++) 应该是 for (int i = 0; i < number; i++) number - 1 不是布尔表达式。

    private static bool isPrimeNumber(int number)
    {
        bool result = true;
        for (int i = 2; i < number; i++)
        {
            if (number % i == 0)
            {
                result = false;
                i = number;
            }
    
        }
        return result;
    }
    

    我修复了for (int i = 0; i &lt; number; i++) 应该是for (int i = 2; i &lt; number; i++)

    【讨论】:

    • 是的,它至少可以工作,我可以看到 rn 但现在这个程序为我输入的每个数字返回“这是素数”。
    • 我没有检查结果是否正确,只检查语法;-)
    • 你是对的。在我的代码块中应用您的建议后,我注意到还有另一个问题。谢谢大家:):)
    【解决方案2】:

    你有逻辑错误,看

     //typo: should be i < number - 1 instead of number - 1
     for (int i = 0; i < number - 1; i++)
     {
         if (number % i == 0) // <- always true, when i == 1
         {
             result = false;  // <- result == false whenever number >= 2 
             i = number;
         }
     }
    

    只要i == 1 然后是number % i == 0 并且你有result = false。 让我们从头开始实现isPrimeNumber

     private static bool isPrimeNumber(int number) {
       // 0, 1 and negative numbers are not prime
       if (number <= 1)
         return false;
    
       // we have just one even prime number, it's 2 
       if (number % 2 == 0)
         return number == 2;  
    
       // if we have a non-trivial divisors, the minimal one
       // is at most Sqrt(number)
       // (int) (...+1) - to be on the safe side in case of rounding errors
       int maxDivisor = (int)(Math.Sqrt(number) + 1);
    
       // Now we check divisor = 3, 5, 7, ..., maxDivisor
       for (int divisor = 3; divisor <= maxDivisor; divisor += 2)
         if (number % divisor == 0)
           return false;
    
       // All tests passed, number is prime
       return true;
     }
    

    【讨论】:

    • 感谢您提供详细的建议,但这些天对我来说很复杂,因为我刚刚开始编码。但我会带着更多经验回来检查您的代码以改进自己。
    猜你喜欢
    • 1970-01-01
    • 2022-12-04
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 2020-03-22
    相关资源
    最近更新 更多