| View previous topic - View next topic | 
  
  
    | Author | Message | 
  
    | Unknown Moira's Silly Little Slave Bitch
 
  
 Joined: 19 Jul 2005
 Posts: 82
 Location: Behind you...
 
 | 
        
          |  Posted: Tue Dec 05, 2006 1:45 pm    Post subject: Primes!!! | [quote] |  
          | 
 |  
          | Here's a little C++ program that i wrote in like 5min to get prime numbers...  Can ANYONE think of a better/faster method/algorithm... 
  	  | Code: |  	  | #include <iostream>
 #include <fstream>
 #include <string>
 
 using namespace std;
 int MaxAmount = 0;
 bool prime = true;
 int main(){
 ofstream PNS ("PrimeNumbers.dat");
 cout << "Please give me a max number to get the primes up to: " <<endl>> MaxAmount;
 for(int lp=0;lp<MaxAmount>1;lp1--){
 if(lp % lp1 == 0){
 prime = false;
 }
 }
 if(prime){
 PNS << lp << "\n";
 }
 prime = true;
 }
 PNS.close();
 return 0;
 }
 
 | 
 P.S. I toke 50min to calculate all the primes between 0 and one million... (On a dual core 1.66Ghz, 1gb ram system)
 
 Ohh and this stupid thing won't let me put << >> .... so, it's supposed to be cin >> MaxAmount; NOT endl>> MaxAmount...
 _________________
 Most people would succeed in small things if they were not troubled with such great ambitions.
 |  | 
  
    | Back to top |  | 
  
    |  | 
  
    | Ninkazu Demon Hunter
 
  
 Joined: 08 Aug 2002
 Posts: 945
 Location: Location:
 
 | 
        
          |  Posted: Tue Dec 05, 2006 2:33 pm    Post subject: | [quote] |  
          | 
 |  
          | I'm sure it's a fuckbunch more code, but Prime95 surely has a faster method, though it's only for Mersenne primes.. |  | 
  
    | Back to top |  | 
  
    |  | 
  
    | Mokona Pretty, Pretty Fairy Princess
 
 
 Joined: 26 Jun 2003
 Posts: 12
 
 
 | 
        
          |  Posted: Tue Dec 05, 2006 2:59 pm    Post subject: Re: Primes!!! | [quote] |  
          | 
 |  
          | That code block seems quite broken: 
  	  | Code: |  	  | for(int lp=0;lp<MaxAmount>1;lp1--){ | 
 doesn't look much like valid C++ code to me. And there appear to be a mismatched number of { and } :-P
 
 Anyway, a couple of possible optimisations:
 1) Break out of the is-this-this-a-prime inner loop once you've found it's not prime.
 2) When checking if a number A is non-prime, you only need check whether there is a prime number <= sqrt(A) which divides A. (This would require you to keep a list of all primes already found, but should drastically improve the speed).
 
 Or if you want to get hardcore, take a look at: http://primes.utm.edu/prove/index.html (The section titled 'Finding Very Small Primes' is closest to what you're trying to do)
 |  | 
  
    | Back to top |  | 
  
    |  | 
  
    | LeoDraco Demon Hunter
 
  
 Joined: 24 Jun 2003
 Posts: 584
 Location: Riverside, South Cali
 
 | 
        
          |  Posted: Tue Dec 05, 2006 6:10 pm    Post subject: | [quote] |  
          | 
 |  
          | He does not appear to be declaring nor setting lp1, either, which confuses me. 
 Note: even with brute force methods, this is going to be extremely difficult to do. The search for primes is non-trivial; so non-trivial, that rather hefty awards are given for finding extremely huge prime numbers. Variations on the difficulty of factoring numbers and so forth are (at the most basic, handwaving level) the reasons why certain variants of public key cryptography are mostly secure.
 
 In any case, there appear to be some interesting algorithms here.
 _________________
 "...LeoDraco is a pompus git..." -- Mandrake
 |  | 
  
    | Back to top |  | 
  
    |  | 
  
    | RedSlash Mage
 
 
 Joined: 12 May 2005
 Posts: 331
 
 
 | 
        
          |  Posted: Wed Dec 06, 2006 1:06 am    Post subject: | [quote] |  
          | 
 |  
          | A number is not prime if it is divisible by any prime number that is < square root of itself. |  | 
  
    | Back to top |  | 
  
    |  | 
  
    | cowgod Wandering Minstrel
 
 
 Joined: 22 Nov 2005
 Posts: 114
 Location: Pittsburgh, USA
 
 | 
        
          |  Posted: Wed Dec 06, 2006 7:04 pm    Post subject: | [quote] |  
          | 
 |  
          | First of all, all primes are odd except for the number 2.  Hardcode the 2, and then only check odd numbers. 
 Even better, hard code 2 and 3 and then observe that every other prime is of the form 6n + 1 or 6n + 5 (6n + 2 is divisible by 2, 6n + 3 is divisible by 3, etc.).  Then you add 6 in each iteration of the loop and only check those 2 numbers.
 
 You can do the same thing by hard coding 2, 3, and 5 and then working with 30n + whatever.  I once wrote a program that stores the found all the primes that are relatively prime to p[0]p[1]...p[x] and between p[0]p[1]...p[x] and p[0]p[1]...p[x + 1].  It would then use those primes for another iteration with x + 1.  This required eliminating multiples of p[x] with each iteration.
 
 At the end, I would eliminate all the other non-primes, which were all multiples of the primes from the previous iteration.
 
 So far as I know, it wasn't especially fast, and you run out of memory before long (even when storing only a single bit for each potential prime in the array).
 |  | 
  
    | Back to top |  | 
  
    |  | 
  
    | Rainer Deyke Demon Hunter
 
 
 Joined: 05 Jun 2002
 Posts: 672
 
 
 | 
        
          |  Posted: Wed Dec 06, 2006 9:52 pm    Post subject: | [quote] |  
          | 
 |  
          | Fastest/simplest way to find all primes up to a maximum: create an array of bits, with size equal to the maximum.  'True' at any position means that the number is prime, 'false' means that it is not.  Initialize to 'true' (i.e. mark all numbers as prime).
Starting with position 2, iterate through the array.
When you find a prime (i.e. the array value is 'true'), mark all multiples of that prime as non-prime (i.e. set their array value to 'false') before proceeding to the next value.
 
 In Python that would be:
  	  | Code: |  	  | maximum = 1000000 # Or some other value values = [True] * maximum
 for i in range(2, maximum):
 if values[i]:
 print i
 for j in range(i * 2, maximum, i):
 values[j] = False
 | 
 
 Trivial to code.  No multiplication.  No division.  O(n m) complexity, where n is the maximum and m is the actual number of primes.  The only problem is memory consumption (bits equal to the maximum), which makes it impractical for truly large maximums (larger than 10 billion or so).  And yes, it can be optimized in all kinds of ways, its runs fast enough that further optimizations are almost always unnecessary.
 |  | 
  
    | Back to top |  | 
  
    |  | 
  
    | Unknown Moira's Silly Little Slave Bitch
 
  
 Joined: 19 Jul 2005
 Posts: 82
 Location: Behind you...
 
 | 
        
          |  Posted: Fri Dec 08, 2006 3:50 pm    Post subject: | [quote] |  
          | 
 |  
          | WOW!!! ok, well... this stupid phpBB posting parser won't let me post the code like it is.... if anyone is interested in the code click here to download it ---> http://www.shadowland.cc/primes.cpp 
 Ohh and the source code will explain where lp1 is "created"....
 _________________
 Most people would succeed in small things if they were not troubled with such great ambitions.
 |  | 
  
    | Back to top |  | 
  
    |  | 
  
    | DeveloperX 202192397
 
  
 Joined: 04 May 2003
 Posts: 1626
 Location: Decatur, IL, USA
 
 | 
        
          |  Posted: Wed Dec 13, 2006 7:46 am    Post subject: | [quote] |  
          | 
 |  
          |  	  | Unknown wrote: |  	  | this stupid phpBB posting parser won't let me post the code like it is.... | 
 
 
  	  | Code: |  	  | #include <iostream>
 #include <fstream>
 #include <string>
 
 using namespace std;
 int MaxAmount = 0;
 bool prime = true;
 int main(){
 ofstream PNS ("PrimeNumbers.dat");
 cout << "Please give me a max number to get the primes up to: " << endl;
 cin >> MaxAmount;
 for(int lp=2;lp<MaxAmount;lp++){
 if(lp % 2 !=1){lp++;}
 for(int lp1=lp-1;lp1>1;lp1--){
 if(lp % lp1 == 0){
 prime = false;
 }
 }
 if(prime){
 PNS << lp << "\n";
 }
 prime = true;
 }
 PNS.close();
 return 0;
 }
 
 | 
 
 looks like it posts code just fine Jeff. ;)
 
 okay, heres mine :D
 
  	  | Code: |  	  | #include <iostream>
 #include <cmath>
 #include <fstream>
 using namespace std;
 
 bool numberIsPrime (int number)
 {
 if ( (2 > number) || (0 == number % 2) )
 return false;
 else if (2 == number)
 return true;
 
 int div = 3;
 int lim = int(sqrt(number) + 1);
 while (lim > div)
 {
 if (0 == number % div)
 return false;
 div += 2;
 }
 return true;
 }
 
 int main ()
 {
 ofstream PrimeFile ("primes.txt");
 if (!PrimeFile)
 {
 cout << "Cannot create primes.txt!\n";
 exit(1);
 }
 int maximum = 0;
 cout << "Enter a number to calculate primes up to: ";
 cin >> maximum;
 for (int n = 1; n <= maximum; n++)
 {
 if (numberIsPrime (n))
 {
 if (PrimeFile)
 {
 PrimeFile << n << "\n";
 }
 }
 }
 if (PrimeFile)
 PrimeFile.close ();
 
 return 0;
 }
 
 
 | 
 _________________
 Principal Software Architect
 Rambling Indie Games, LLC
 
 See my professional portfolio
 |  | 
  
    | Back to top |  | 
  
    |  | 
  
    | Unknown Moira's Silly Little Slave Bitch
 
  
 Joined: 19 Jul 2005
 Posts: 82
 Location: Behind you...
 
 | 
        
          |  Posted: Wed Dec 13, 2006 4:24 pm    Post subject: | [quote] |  
          | 
 |  
          | NICE!!! _________________
 Most people would succeed in small things if they were not troubled with such great ambitions.
 |  | 
  
    | Back to top |  | 
  
    |  | 
  
    | tcaudilllg Dragonmaster
 
  
 Joined: 20 Jun 2002
 Posts: 1731
 Location: Cedar Bluff, VA
 
 | 
        
          |  Posted: Fri Dec 15, 2006 8:14 pm    Post subject: | [quote] |  
          | 
 |  
          | I don't understand the focus on finding primes. Can someone explain it to me? |  | 
  
    | Back to top |  | 
  
    |  | 
  
    | Nodtveidt Demon Hunter
 
  
 Joined: 11 Nov 2002
 Posts: 786
 Location: Camuy, PR
 
 | 
        
          |  Posted: Fri Dec 15, 2006 11:13 pm    Post subject: | [quote] |  
          | 
 |  
          | I usually equate it to SPS. _________________
 If you play a Microsoft CD backwards you can hear demonic voices. The scary part is that if you play it forwards it installs Windows. - wallace
 |  | 
  
    | Back to top |  | 
  
    |  | 
  
    | LeoDraco Demon Hunter
 
  
 Joined: 24 Jun 2003
 Posts: 584
 Location: Riverside, South Cali
 
 | 
        
          |  Posted: Sat Dec 16, 2006 8:06 am    Post subject: | [quote] |  
          | 
 |  
          |  	  | nodtveidt wrote: |  	  | I usually equate it to SPS. | 
 Hurray for overloaded acronyms! As I am too tired/lazy to savvy which phrase you are using, care to explicate?
 _________________
 "...LeoDraco is a pompus git..." -- Mandrake
 |  | 
  
    | Back to top |  | 
  
    |  | 
  
    | Nodtveidt Demon Hunter
 
  
 Joined: 11 Nov 2002
 Posts: 786
 Location: Camuy, PR
 
 | 
        
          |  Posted: Sat Dec 16, 2006 2:18 pm    Post subject: | [quote] |  
          | 
 |  
          | Actually, it isn't listed on wikipedia. SPS in this case refers to "small penis syndrome". :O _________________
 If you play a Microsoft CD backwards you can hear demonic voices. The scary part is that if you play it forwards it installs Windows. - wallace
 |  | 
  
    | Back to top |  | 
  
    |  | 
  
    | Unknown Moira's Silly Little Slave Bitch
 
  
 Joined: 19 Jul 2005
 Posts: 82
 Location: Behind you...
 
 | 
        
          |  Posted: Sat Dec 16, 2006 4:12 pm    Post subject: | [quote] |  
          | 
 |  
          | small penis syndrome... hmm, is that something YOU are familiar with??? lets stay on topic shall we! 
 
 P.S. LG....here's some reading material  http://www.rsasecurity.com/rsalabs/node.asp?id=2189
 _________________
 Most people would succeed in small things if they were not troubled with such great ambitions.
 |  | 
  
    | Back to top |  | 
  
    |  |