Public · Protected · Private
Getting First 100 Prime numbers
Type: Public  |  Created: 2008-08-19  |  Frozen: Yes
« Previous Public Blog Next Public Blog »
Comments
  • Problem statement : Given a value 500 I want first 500 prime numbers
    2008-08-19 17:03
  • //Call this from client getprimes(500); private void getprimes(int mysize) { int[] values = new int[mysize]; int counter = 0; int jjj = 0; for (int i = 2; counter < mysize; i++) { if (checkprime(i, ref jjj)) { values[counter] = i; counter++; } } // Just to Display string answer = ""; string smallanswer = ""; for (counter = 0; counter < mysize; counter++) { smallanswer += values[counter].ToString() + "-"; if (smallanswer.Length > 200) { answer += smallanswer + "\r\n"; smallanswer = ""; } } MessageBox.Show(answer + smallanswer + "--" + jjj.ToString()); } private bool checkprime(int x,ref int jjj) { for (int i = 2; i <= (Math.Sqrt(x) ); i++) { if (((x / i) * i) == x) return false; jjj++; } return true; }
    2008-08-19 17:07
  • Above algorithm for checkprime travels from 2 to SQRT of that number. Any better algorithm?
    2008-08-19 17:09
  • No need to travel all numbers you can travel only Previous prime numbers. //call getprimes2() from client getprimes2() from client //Have a global variable int[] MyPrimes; private void getprimes2(int mysize) { MyPrimes = new int[mysize]; MyPrimes[0] = 2; int counter = 1; int jjj = 0; for (int i = 2; counter < mysize; i++) { if (checkprime2(i, counter)) { MyPrimes[counter++] = i; } } string answer = ""; string smallanswer = ""; for (counter = 0; counter < mysize; counter++) { smallanswer += MyPrimes[counter].ToString() + "-"; if (smallanswer.Length > 200) { answer += smallanswer + "\r\n"; smallanswer = ""; } } MessageBox.Show(answer + smallanswer + "--" + jjj.ToString()); } private bool checkprime2(int x, int counter) { for (int i = 0; i < counter ; i++) { if (((x / MyPrimes[i]) * MyPrimes[i]) == x) return false; } return true; }
    2008-08-19 17:13
  • Here is my code, any suggestions for optimization are most welcome: /// <summary> /// Find top x prime numbers. /// </summary> /// <param name="x">Integer, Top[] specifier</param> /// <returns>An Arraylist containing top x prime numbers</returns> public static ArrayList FindPrimes(int x) { System.DateTime startTime = System.DateTime.Now; if(x<=0) { return null; } Console.WriteLine("Top " + x + " Prime numbers are: "); ArrayList answer = new ArrayList(); answer.Add(2); for (int i = 3; ; i++) { bool divisible = false; foreach (int y in answer) { if (i % y == 0) { if( divisible = true||i<2*y) break; } } if (divisible) { } else if (divisible == false && answer.Count < x) { answer.Add(i); Console.WriteLine(i); } else break; } System.DateTime endTime = System.DateTime.Now; Console.WriteLine("Duration to find top[ "+x+"] Prime numbers is"+(endTime-startTime).ToString()); return answer; }
    2008-08-19 17:18
  • Good One
    2008-08-19 17:21
  • In basic checking of prime number... private bool checkprime2(int x, int counter) we can use best of both. 1) scan the previous primenumbers for divisability check 2) where in these numbers are less than square root of the number that is being verified.
    2008-08-20 10:42
This blog is frozen. No new comments or edits allowed.