【问题标题】:getting all prime numbers获取所有素数
【发布时间】:2014-01-04 02:47:52
【问题描述】:

我编写了一个简单的 C# 控制台应用程序,它获取所有素数,并将它们堆叠到一个字符串变量中。

我的问题是为什么第一个“如果”接受所有数字?我认为我写的规则很好。我的代码(当然所有变量都在脚本头部格式化):

check++;
number++;
num = number;
if (number / num == 1 && number / 1 == num)
{
    Console.WriteLine("Working...");
    Console.WriteLine("Numbers Checked: " + check);

    produce++;
    Console.WriteLine("Numbers Prodused: " + produce);


    Console.WriteLine("Numbers Failed : " + fail);

    System.Threading.Thread.Sleep(1);
    Console.Clear();

    //storing the numbers
    str += Convert.ToString(number);
}
else
{
    fail++;
}
Console.WriteLine(str);

问题是,当我运行程序时,失败指示器保持为 0,这意味着循环正在处理所有数字,素数没有例外。

我该如何解决这个问题?我的“如果(规则)”错了吗?


编辑! :

我开始新鲜;) 这就是我所做的:

        bool isPrime = false;
        int number = 0, counter = 0;

        while (number <= counter)
        {
            counter++;
            number++;
            isPrime = true;
            for (int i = 2; i < number; ++i)
            {
                if (number % i == 0)
                {
                    isPrime = false;
                    break;
                }
            }
            if (isPrime)
            {
                System.Threading.Thread.Sleep(1);
                Console.WriteLine(number);
                Console.Beep();
            }
            Console.WriteLine("Try Number " + counter);

效果很好,我很快会继续将它开发成 Windows 窗体应用程序;)

【问题讨论】:

  • 您是否尝试过使用调试器查看发生了什么?
  • 你应该循环到i&lt;number/2,因为你已经检查过它是否可以被2整除。见类似帖子stackoverflow.com/q/15743192/380384

标签: c#


【解决方案1】:
 num = number;
        if (number / num == 1 && number / 1 == num)
        {

假设number 等于10

num = number = 10;

if(10 / 10 == 1 && 10 / 1 == 10) {
    // This is called a constant positive.
}

numnumber 总是相同的,所以我们可以从更数学的意义上说

for all a,b where a == b.

a/b = 1
a/1 = b

这意味着无论number 的值是多少,您总是会在if statement 中计算出true

你想做什么

你应该仔细看看how you define a prime number。目前你说的是:

某个整数a被认为是素数当且仅当它可以被1和它自己整除。

你还需要证明它也不能被小于它的数字整除!

所以..

而您可以采用的方法是特定方法,您可以在其中检查 all 0 &lt;&lt; i &lt;&lt; a(介于 0 和当前数字之间),或者您可以使用一些如果数字是probabilistic prime,更有趣的方法将起作用。也就是说,我们不是certain 认为它是质数,但它很有可能是质数。

对于某些素数,请查看this,当您感觉更自信时,请尝试this

对于概率素数,here。这将为您解释许多不同的算法。

【讨论】:

  • 我重新开始了 ;) 这就是我所做的:
【解决方案2】:

这完全没有意义。让我们分解以下几行:

num = number;
if (number / num == 1 && number / 1 == num)

由于您设置了num = numbernumber / num始终为 1,因此左侧的计算结果为 true始终

正确的部分甚至没有意义。除以 1 绝对没有任何作用,所以 number / 1 只是 number。现在,您真正拥有的只有number == num,并且由于您将numnumber 设置为相同,因此计算结果也为true。

你不妨写if (true)

你到底想用这个 if 语句来完成什么?

【讨论】:

    【解决方案3】:

    因为每个数字除以 1 就是它自己的数字。 为什么 number 和 num 相等?因为 if 条件之前的行将num 分配为number

    【讨论】:

      【解决方案4】:

      num = 数字; 如果条件适用,您每次都将 num 设置为等于 number

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-07
        • 2016-11-15
        • 2011-04-30
        • 2020-09-29
        • 1970-01-01
        • 2016-10-05
        • 2020-03-27
        相关资源
        最近更新 更多