精神方法解决素数检查?

时间:2014-08-21 01:36:48

标签: c#

我正在尝试开发一个程序,打印到控制台所有素数在1到100之间。我在试图概念化问题时遇到了麻烦。有多个嵌套循环,我忘记了逻辑。这是不完整的代码/伪代码混乱:

using System;

class Prime_Screening
{
    static void Main()
    {
        Console.WriteLine("This program screens all numbers between 1 and 100 for primes and displays the results.");

            for (int numberToPrimeCheck = 2; numberToPrimeCheck <= 100; numberToPrimeCheck++)
            {
                for (int divisor = 2; divisor <= Math.Sqrt(numberToPrimeCheck); divisor++)
                {
                    int remainder = 0;
                    while (remainder = 0)
                    {
                        remainder = numberToPrimeCheck % divisor;
                        if (remainder != 0)
                        {
                            break;
                        }

                    }
                }
            }
    }
}

这是一个巨大的混乱。我不知道从哪里开始这个节目。从逻辑上讲,它看起来像一个大球串。我知道remaining = numberToPrimeCheck%divisor是这个问题的核心,但我是从那里开始还是在第一次循环?

在编写像这样的小程序时,您是如何以及在何处开始考虑它的?我是一名初学程序员,但书籍并没有教你如何思考编程问题。有人可以教我解决这类问题的思维过程吗?

编辑:我明白了,问题太宽泛了。但是有些问题本质上并不是狭隘的,而是成为一名优秀程序员所必需的。因此过于严格。我不仅仅想要我的代码的答案,我想学习如何思考和解决一般的编程问题。

3 个答案:

答案 0 :(得分:0)

using System;

class Prime_Screening
    {
    bool prime;
    static void Main()
        {
        Console.WriteLine("Prime numbers x, where: 0 < x < 100");

            for (int num= 2; num<= 100; num++)
            {

                prime = True;
                for (int div= 2; div<= Math.Sqrt(num); div++)
                    if(num % div== 0)
                        prime = False;
                if (prime)
                    Console.Write(num.ToString() + ", ");
            }
        } 
    }

这种方式非常简单:

它检查是否有任何除数是当前数字的因子,如果是,则将变量prime设置为false。否则,素数保持为真,数字将被打印。

答案 1 :(得分:-1)

这听起来像是一个考试问题......然而,你应该能够通过“mod”功能实现这一目标。如果“mod”== 0则prime = false。

答案 2 :(得分:-2)

这是正确的代码:

using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("This program screens all numbers between 1 and 100 for primes and displays the results.");

        for (var numberToPrimeCheck = 2; numberToPrimeCheck <= 100; numberToPrimeCheck++)
        {
            var remainder = 1;
            for (var divisor = 2; divisor <= Math.Sqrt(numberToPrimeCheck); divisor++)
            {
                remainder = numberToPrimeCheck % divisor;
                if (remainder == 0)
                {
                    break;
                }
            }
            if (remainder != 0)
                Console.WriteLine(numberToPrimeCheck);
        }
    }
}