2015-08-14 76 views
-2

例如,我發現從2到100的素數。我需要知道哪個數字在位上讓我們說24個。你能幫我找到最簡單的方法嗎?c#如何找到範圍內的數字位置

using System; 
using System.Collections.Generic; 

class SomePrimesRange 
{ 
    static void Main() 
    { 

     for (int i = 2; i < 260; i++) 
     { 
      if (i % 2 == 0) 
      { 

      } 
      else if (i % i == 0) 
      { 
       Console.WriteLine(i); 
      } 
      List<int> numbers = new List<int>(260); 
      numbers.Add(i); 
      foreach (int a in numbers) 
      { 
       Console.WriteLine("Enter a position:"); 
       int position = int.Parse(Console.ReadLine()); 
       Console.WriteLine(position); 
      } 
     } 
    } 
} 
+1

'你能不能幫我找到了最簡單的方法呢'? – Eser

+0

嗨!我嘗試過這樣做: [http://pastebin.com/LPER5CNq]這是我到目前爲止努力的方式:( –

回答

0

首先,我假設你不想要一個簡單的解決方案,因爲這將是蠻力,並會導致緩慢未優化的代碼。

我不會爲你寫代碼,但我會解釋這個背後的理論,給你一些僞代碼。

func findPrimeNumber(int n){ 
    primeArray = [] 
    int number = 1 

    while(primeArray.length < n){ 
    if(isNumberPrime(number) == true){ 
     primeArray.append(number, primeArray) 
    } 
    number++ 
    } 
} 

func isNumberPrime(int number, int[] primeArray){ 
    var minCheck = Math.roundUp(Math.sqrt(number)) 
    foreach prime in primeArray{ 
    if(prime <= minCheck && prime > 1){ 
    if(number % prime != 0){ 
     //keep checking numbers 
    }else{ 
     return false 
    } 
    }else{ 
     break; //no more checking is necessary 
    } 
    return true; 
    } 
} 

我在上面的僞代碼中實現了兩個基本概念(您可能需要增強邊緣案例的代碼)。

通過檢查2 ... n-1運行確定數字是否爲素數的算法效率不高,並且浪費。

  1. 你只需要檢查數字,直到你的號碼的平方根你的檢查四捨五入。例如,要確定16是否爲素數,則只需檢查2,3,4是否爲素數。 (以2和4的形式回答是)。

17怎麼樣? 2,3,4,5是不可分的,17是質數。

  1. 您只需檢查素數因子。由於每個非素數都是由素數組成,所以檢查一個數是否爲質數是沒有意義的。所以你只需要檢查小於平方根的素因子。

在確定24次迭代而言,有可能是一個動態編程解決方案,比我更聰明,但我只是線性地尋找第24個素數,但優化了尋找過程,這樣會快。

讓我知道你是否需要任何幫助。祝你好運,有趣的小問題。

+0

@John Thompson這是否能夠提供幫助? – Unome

0

做一個foreach循環。將數字添加到列表中。然後獲取數組中的第24項。項目[23](沒有項目[24]因爲數組始於0]

這是代碼爲這樣的:

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

namespace PrimeNumberHelp 
{ 
    class Program 
    { 

     private static int Max = 100; 
     static void Main(string[] args) 
     { 
      List<int> Primes = new List<int>(); 
      int current = 0; 
      while (current <= 100) 
      { 
       if (IsPrime(current)) 
        Primes.Add(current); 
       current++; 
      } 
      Console.WriteLine(Primes[23]); 
      Console.ReadKey(); 
     } 

     private static bool IsPrime(int number) 
     { 
      if (number == 1) 
       return false; 
      if (number == 2) 
       return true; 

      if (number % 2 == 0) 
       return false; 

      for (int i = 3; i * i <= number; i += 2) 
      { 
       if (number % i == 0) 
        return false; 
      } 
      return true; 
     } 
    } 
} 
+0

我這樣做確實是錯誤的,你能幫我一下嗎?我是C#的新手,我認爲這樣的事情可以做到這一點: [http://pastebin.com/LPER5CNq] 但是沒有:( –

+0

@TsenkoAleksiev對此有幫助嗎?如果是這樣,請選擇此作爲答案。 –

相關問題