Как я могу вызвать этот метод .. + проверить, если мой метод правильный или нет - PullRequest
0 голосов
/ 23 февраля 2012

прошлой ночью я задал этот вопрос .. эта ссылка и участники ответили мне (спасибо) у меня есть другой метод, который делает меня, как будто у меня есть проблемы с этим ..

Я поставлю 2 метода ... Второй вопрос, о котором я спрашиваю.

 public static bool ISprime(int prime)
    {

            if (prime < 2 )
                return false;
            else if (prime == 2)
                return true;
            else
            {
                for (int i = 2; i < prime; i++)
                {
                    if (prime % i == 0)
                        return false;
                }

                return true;
            }            
    }
     // second method
    public static int[] GeneratePrimes(int[] n)
    {
        int[] array = new int[n.Length];
        int PrimeLength =0;
        for (int i = 0; i < n.Length; i++) 
        {
            if (ISprime(array[i]))
                PrimeLength++;
        }

        int[] arprime = new int[PrimeLength];

        for (int i = 0, j=0; i< PrimeLength; i++)
        {
            if (ISprime(i))
                arprime[j++] = i;
        }
        return arprime;
    }
  1. GeneratePrimes - это правильный метод .. я хочу поместить все простые числа в массив с именем arprime ..
  2. в ассемблере / программе, как я могу передать число .. такого типа пользователя, как Console.ReadLine()

спасибо

Ответы [ 4 ]

0 голосов
/ 23 февраля 2012

Ответ 1: Что вы можете сделать:

enter code here

public static int[] GeneratePrimes(int[] n)     
{         
     int[] array = new int[n.Length];  
     int[] arprime = new int[n.Length];    

     int PrimeLength =0;  
     int j=0;       
     for (int i = 0; i < n.Length; i++)          
     {             if (ISprime(array[i]))  
                   {
                         PrimeLength++;  
                         arprime[j++]=array[i];
                   }          
      }
      Array.Resize(ref arprime, PrimeLength);
      return arprime;     

}

Ответ 2:

Включить эту сборку в пространство имен

AssemblyName.ClassName.MethodName (int.Parse (Console.ReadLine ()));// Для передачи целочисленных данных otherwize не приведен

0 голосов
/ 23 февраля 2012

если вам нужно иметь все простые числа от 1 до n, вам нужно что-то вроде этого:

int[] GeneratePrimes(int n)
{
   List<int> primes = new List<int>();
   for (int i=1; i<=n i++)
   {
      if (IsPrime(i))
      {
         primes.Add(i);
      }
   }

   return primes.ToArray();
}

Но этот алгоритм не эффективен.Смотрите это: http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes Также есть другие сита, которые еще более эффективны.

Upd. Если вам нужны первые n простых чисел, вам нужно сделать что-то вроде этого:

int[] GeneratePrimes(int n)
{
   List<int> primes = new List<int>();

   while (primes.Length < n)
   {
      if (IsPrime(i))
      {
         primes.Add(i);
      }
   }

   return primes.ToArray();
}
0 голосов
/ 23 февраля 2012

Чтобы ответить на ваш первый вопрос, я понимаю, что GeneratePrimes() вернет массив, который содержит только простые числа из массива, предоставленного в качестве параметра.

Ваш метод не будет работать, потому что if (ISprime(array[i])) всегда будет неудачным, так как 'array' не имеет назначенных ему значений. Вы должны использовать if (ISprime(n[i])) вместо.

Однако вы также можете избежать двух циклов, выполняющих одну и ту же задачу. Вам может помочь следующий код:

public static int[] GeneratePrimes(int[] n)
{
   List<int> primeList = new List<int>();
   for (int i=0; i<n.Length; i++)
   {
      if(isprime(n[i]))
        primeList.Add(n[i]);
   }

   return primeList.ToArray();
}
0 голосов
/ 23 февраля 2012

Не уверен, что ваш метод будет работать, но в ответ на вторую часть вашего вопроса:

string s = Console.ReadLine();
int n = Convert.ToInt32(s);
int[] arprimes = GeneratePrimes(n);

Вероятно, лучше всего попытаться использовать бит преобразования, поскольку пользователь может ввести что-то, что не является числом.

РЕДАКТИРОВАТЬ: На самом деле я бы изменил метод на GeneratePrimes (int n) вместо GeneratePrimes (int [] n) - вам не нужно передавать массив чисел, только число, поскольку оно возвращает массив.

Другое редактирование: здесь ваш метод изменен так, что вы передаете int вместо массива int. Тем не менее, я не уверен, что этот метод действительно будет работать.

public static int[] GeneratePrimes(int n)
{
    int[] array = new int[n];
    int PrimeLength =0;
    for (int i = 0; i < n; i++) 
    {
        if (ISprime(array[i]))
            PrimeLength++;
    }

    int[] arprime = new int[PrimeLength];

    for (int i = 0, j=0; i< PrimeLength; i++)
    {
        if (ISprime(i))
            arprime[j++] = i;
    }
    return arprime;
}

и вот что вы хотите в качестве основного метода

public static void Main(I cannot remember what goes here!)
{
    string s = Console.ReadLine();
    int n = Convert.ToInt32(s);
    int[] arprimes = GeneratePrimes(n);
    string output = "";
    for (i=0; i<arprimes.Length;i++)
    {
        output += arprimes[i].ToString() + ", ";
    }
    output = output.Remove(output.Length - 3, 2);
    Console.WriteLine(output);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...