得到所有素数

时间:2013-12-16 16:17:25

标签: c#

我编写了一个简单的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窗体应用程序;)

4 个答案:

答案 0 :(得分:4)

 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的价值如何,您总是要评估true中的if statement

你想做什么

你应该更接近how you define a prime number。目前您正在说以下内容:

  

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

你还需要证明它不能用数字除以它!

<强>所以..

虽然您可以采取的方法是某种方法,您可以在其中检查所有 0 << i << a(0和当前数字之间),或者您可以使用如果数字为probabilistic prime,一些更有趣的方法将会解决。也就是说,我们不是certain它是一个素数,但它的可能性非常高。

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

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

答案 1 :(得分:3)

这绝对没有意义。让我们分解这些界限:

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语句完成什么?

答案 2 :(得分:0)

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

答案 3 :(得分:0)

num = number; 如果条件适用,则每次设置num等于数字