找到素数集中的第n个素数。

时间:2010-03-24 04:59:39

标签: c# primes

此应用程序将收到一个数字“n”。在收到这个数字后,程序必须在素数列表中显示第n个素数。例如,如果用户输入“3”,程序应显示“5”,因为5是从2开始的第三个素数。我知道我的代码出了问题,但我不知道问题出在哪里以及如何解决它。

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Determinar el n-esimo primo.");
            long n = Convert.ToInt64(Console.ReadLine()); // N lugar de primos
            long[] array = new long[n];
            long c=0;
            while (c >= 2) 
            { 
                if(siprimo(c++) == true)
                    for (long i = 0; i < n; i++)
                    {
                        array[i] = c;
                    }
            }

            Console.WriteLine(array[n - 1]);
            Console.ReadLine();
        }

        static private bool siprimo(long x)
        {
            bool sp = true;
            for (long k = 2; k <= x / 2; k++)
                if (x % k == 0)
                    sp = false;
            return sp;
        }
    }
}

3 个答案:

答案 0 :(得分:2)

这看起来像是家庭作业,我不打算为你做功课。但是我会告诉你,如果你只是通过程序步骤(在Visual Studio中使用F10),那么问题就很容易找到。

提示:c什么时候会增加?

答案 1 :(得分:2)

要问自己的其他一些问题:

  • 当找到素数时(siprime),值存储在哪里?
  • 您在while (c >= 2)代码块中循环了多少次?

答案 2 :(得分:0)

更像是:

int GetAnswer(int nprime) {
   if (nprime == 1) return 2;
   if (nprime == 2) return 3;

   int j;
   int n = 2; 
   int i = 5;

   while (n < nprime)  {

     int isprime = 1;
     double r = Math.Sqrt(i);

     for(j = 3; j <= r;  j+=2)
        if((i%j) == 0) {
           isprime = 0;
           break;
        } 


     n+=isprime; 
     i+=2;
   }
   return i;
 }

在你的程序中,你犯了一些错误:

long c=0;
while (c >= 2) 

C永远不会大于2,因此代码永远不会被执行。