打印从0到10,000的素数

时间:2015-03-04 04:47:47

标签: c# for-loop numbers primes do-while

我目前正在尝试创建一个程序,仅使用for,do while和ifs打印从0到10,000的素数。我创建了这个程序,但它没有运行

static void Main(string[] args)
    { 
        for (int x = 2; x < 10000; x++)
        { 
            for (int y = 1; y < x; y++)
            { 
                if (x % y != 0)
                {
                    Console.WriteLine(x); 
                }  
            }
            Console.ReadKey();
        }

我不知道问题在哪里以及内部是否重置。

6 个答案:

答案 0 :(得分:3)

尝试使用bool变量!!!:

static void Main(string[] args)
{
    for (int x = 2; x < 10000; x++)
    {
        int isPrime = 0;
        for (int y = 1; y < x; y++)
        {
            if (x % y == 0)
                isPrime++;

            if(isPrime == 2) break;
        }
        if(isPrime != 2)
           Console.WriteLine(x);

        isPrime = 0;
    }
    Console.ReadKey();
}

检查Console.ReadKey();它应该在上for循环之后,你甚至可以用for来改变上<=战利品的条件,因为10000还需要检查prime条件。

答案 1 :(得分:3)

以下是打印0到10000之间的素数的有效方法

using System.IO;
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("Below are prime numbers between 0 and 10000!");
        Console.WriteLine(2);
        for(int i=3;i<=10000;i++)
        {
            bool isPrime=true;
            for(int j=2;j<=Math.Sqrt(i);j++)
            {
                if(i%j==0)
                {
                    isPrime=false;
                    break;
                }
            }
            if(isPrime)
            {
                Console.WriteLine(i);
            }
        }
    }
}

答案 2 :(得分:2)

第一个问题是x % 1 总是为零,至少对于非零x。你需要在一个开始测试(内部)循环,为了提高效率,当你超过数字本身的平方根时停止 - 如果n有一个因子f其中{{ 1}},您已经找到了因子f > sqrt(n)

第二个问题是,每当余数为非零时,您将写出候选编号。因此,因为n / f是3,所以尽管十五是非素数,但它将被输出。它还会在15 % 415 % 215 % 415 % 6等处输出。

主要测试的正常(天真)算法是:

15 % 7

答案 3 :(得分:2)

你有没有理由把Console.ReadKey();循环内部?

除非在循环过程中按键,否则你应该把它放在循环之外。

static void Main(string[] args)
{
    for (int x = 2; x < 10000; x++)
    {

        for (int y = 1; y < x; y++)
        {

            if (x % y != 0)
            {
                Console.WriteLine(x);
            }
        }
    }
    Console.ReadKey();
}

可能那段代码只是打印很多x。 你应该解决它。

答案 4 :(得分:0)

以下是打印Prime No的任何上限的简单逻辑。

输入:10输出:2,3,5,7

var array = [2, 5, 9];
array.splice(array.findIndex(x => x==5), 1);

答案 5 :(得分:0)

这是我的代码,您可以在其中生成和打印两个数字之间的质数(在string_starting_number和string_last_number之间)。 string_starting_number的最小可能值为0,string_last_number的最大可能值为十进制。MaxValue-1= 79228162514264337537543950334而不是79228162514264337593543950950335,而不是79228162514264337593543950950335,因为在FOR循环中使用了decimal_a ++命令,这会导致溢出错误。

请注意,您应该在string_starting_number和string_last_number中以字符串类型输入值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GeneratingPrimeNumbers
{
    class Program
    {
        static void Main(string[] args)
        {
            string string_starting_number = "1"; //input here your choice of starting number
            string string_last_number = "10"; //input here your choice of last number
            decimal decimal_starting_number = Convert.ToDecimal(string_starting_number);
            decimal decimal_last_number = Convert.ToDecimal(string_last_number);
            string primenumbers = "";
            ulong ulong_b;
            ulong ulong_c;
            if (decimal_starting_number <= ulong.MaxValue)
            {
                ulong ulong_starting_number = Convert.ToUInt64(decimal_starting_number);
                ulong ulong_last_number;
                if (decimal_last_number > ulong.MaxValue)
                {
                    ulong_last_number = ulong.MaxValue;
                }
                else
                {
                    ulong_last_number = Convert.ToUInt64(decimal_last_number);
                }
                if (ulong_starting_number == 0 || ulong_starting_number == 1 || ulong_starting_number == 2 || ulong_starting_number == 3)
                {
                    primenumbers = 2 + " " + 3;
                    ulong_starting_number = 5;
                }
                if (ulong_starting_number % 2 == 0)
                {
                    ulong_starting_number++;
                }
                ulong ulong_a;
                for (ulong_a = ulong_starting_number; ulong_a <= ulong_last_number; ulong_a += 2)
                {
                    ulong_b = Convert.ToUInt64(Math.Ceiling(Math.Sqrt(ulong_a)));
                    for (ulong_c = 3; ulong_c <= ulong_b; ulong_c += 2)
                    {
                        if (ulong_a % ulong_c == 0)
                        {
                            goto next_value_of_ulong_a;
                        }
                    }
                    primenumbers = primenumbers + " " + ulong_a;
                    next_value_of_ulong_a:
                    {
                    }
                }
            }
            if (decimal_last_number > ulong.MaxValue)
            {
                string ulong_maximum_value_plus_two = "18446744073709551617";
                if (decimal_starting_number <= ulong.MaxValue)
                {
                    decimal_starting_number = Convert.ToDecimal(ulong_maximum_value_plus_two);
                }
                if (decimal_starting_number % 2 == 0)
                {
                    decimal_starting_number++;
                }
                decimal decimal_a;
                for (decimal_a = decimal_starting_number; decimal_a <= decimal_last_number; decimal_a += 2)
                {
                    ulong_b = Convert.ToUInt64(Math.Ceiling(Math.Sqrt(ulong.MaxValue) * Math.Sqrt(Convert.ToDouble(decimal_a / ulong.MaxValue))));
                    for (ulong_c = 3; ulong_c <= ulong_b; ulong_c += 2)
                    {
                        if (decimal_a % ulong_c == 0)
                        {
                            goto next_value_of_decimal_a;
                        }
                    }
                    primenumbers = primenumbers + " " + decimal_a;
                    next_value_of_decimal_a:
                    {
                    }
                }
            }
            Console.WriteLine(primenumbers);
            Console.ReadKey();
        }
    }
}