解决质数检验的心理方法

本文关键字:方法 检验 解决 | 更新日期: 2023-09-27 18:18:51

我正在尝试开发一个程序,将打印到控制台之间的所有素数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;
                        }
                    }
                }
            }
    }
}

真是一团糟。我不知道从哪里开始这个项目。从逻辑上讲,它看起来像一个大线球。我知道remainder = numberToPrimeCheck %divisor是这个问题的核心,但是我是从那里开始还是从第一个循环开始呢?

当你写这样一个小程序的时候,你是从哪里开始考虑的?我是一名初级程序员,但是书籍不会教你在哪里以及如何思考一个编程问题。有人能教我解决这样一个问题的思路吗?

我明白了,这个问题太宽泛了。但有些问题本质上并不狭窄,而是成为一名优秀程序员所必需的。SO是限制太多。我不只是想要我的代码的答案,我想学习如何思考和解决一般的编程问题。

解决质数检验的心理方法

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。否则,prime仍然为真,并打印数字。

这听起来像是考试题目…尽管如此,您应该能够使用"mod"函数实现这一点。如果"mod" == 0则prime = false

正确的代码如下:

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);
        }
    }
}