Нахождение n-го простого числа в множестве простых чисел. - PullRequest
1 голос
/ 24 марта 2010

Это приложение получит номер "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 ]

2 голосов
/ 24 марта 2010

Некоторые другие вопросы, которые вы себе задаете:

  • когда найдено простое число (siprime), где хранится значение?
  • сколько раз вы перебираете кодовый блок while (c >= 2)?
2 голосов
/ 24 марта 2010

Это похоже на домашнюю работу, и я не собираюсь делать вашу домашнюю работу за вас. Но я скажу вам, что проблему ОЧЕНЬ легко найти, если вы просто ПРОЙДЕТЕ через свою программу (используйте F10 в Visual Studio).

Подсказка: когда c увеличивается?

0 голосов
/ 24 марта 2010

Больше похоже на:

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, поэтому код никогда не выполняется.

...