Make your own free website on Tripod.com

MKoD - D Programming Language

Find Prime numbers - code-name prime_example.d

Very Kool! Find Prime numbers example:

// prime_example.d
/+
 ' Title           : Fun with Prime Numbers  
 ' Original Author : Steve Litt (c) 2004 All rights reserved. 
 ' Original Code   : http://www.troubleshooters.com/codecorn/primenumbers/primenumbers.htm
 ' Example         : Getting Prime Numbers by using the "Array Method (Sieve of Eratosthenes)"
 ' -------------------------------------------------------------------------------------------
 ' D conversion by David 'SpottedTiger' Davis 
 ' Sample Primes: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, ...
 +/
module findprime;

private import std.stdio;

void printPrime( in uint uiPrime )
{
    static uint uiy = 0U;

    std.stdio.writef( "%4d, ", uiPrime );
    uiy++;

    if ( ( uiy % 10U ) == 0U )
    {
        uiy = 0U;
        std.stdio.writefln();  
    }
} // end void printPrime( in ulong )

void findPrimes( in uint uiTopCandidate )
{
    char[] sPrimeArray;
    uint   uiThisFactor;
    uint   uiLastSquare;
    uint   uiThisSquare;
    uint   uiMark;

    sPrimeArray.length =  uiTopCandidate + 1U;
    sPrimeArray[] = true;
      
    // Set all but 0 and 1 to Prime status    
    sPrimeArray[ 0 ] = 0U;
    sPrimeArray[ 1 ] = 0U;
    
    // Mark all the non-Primes
    uiThisFactor = 2U;
    uiLastSquare = 0U;
    uiThisSquare = 0U;
    
    while ( uiThisFactor * uiThisFactor <= uiTopCandidate )
    { 
        // Mark the multiples of this factor
        uiMark = uiThisFactor + uiThisFactor;
        
        while( uiMark <= uiTopCandidate )
        {
            sPrimeArray[ uiMark ] = false;
            uiMark += uiThisFactor;
        } 
         
        // Print the proven Primes so far 
        uiThisSquare = uiThisFactor * uiThisFactor;
        
        for ( ; uiLastSquare < uiThisSquare; uiLastSquare++ )
            if( sPrimeArray[ uiLastSquare ] == true ) 
                printPrime( uiLastSquare );
                
        // Set ulThisFactor to the Prime
        uiThisFactor++;
        
        while ( sPrimeArray[ uiThisFactor ] == false ) 
            uiThisFactor++;
            
        assert( uiThisFactor <= uiTopCandidate );
    } 
    
    // Print the remaining Primes
    for ( ; uiLastSquare <= uiTopCandidate; uiLastSquare++ )
        if( sPrimeArray[ uiLastSquare ] == true ) 
            printPrime( uiLastSquare );
    
    sPrimeArray.length = 0U;
    
} // end void findPrimes( in uint )

int main()
{
    uint uiTopCandidate = 1000U;
    
    writefln( "All the numbers listed below between 0 to 1000 are Primes!" );
    findPrimes( uiTopCandidate );
    
    return 0;
    
} // end int main()

C:\dmd\MKOD_ex>..\bin\dmd prime_example.d
C:\dmd\bin\..\..\dm\bin\link.exe prime_example,,,user32+kernel32/noi;

C:\dmd\MKOD_ex>prime_example
All the numbers listed below between 0 to 1000 are Primes!
   2,    3,    5,    7,   11,   13,   17,   19,   23,   29,
  31,   37,   41,   43,   47,   53,   59,   61,   67,   71,
  73,   79,   83,   89,   97,  101,  103,  107,  109,  113,
 127,  131,  137,  139,  149,  151,  157,  163,  167,  173,
 179,  181,  191,  193,  197,  199,  211,  223,  227,  229,
 233,  239,  241,  251,  257,  263,  269,  271,  277,  281,
 283,  293,  307,  311,  313,  317,  331,  337,  347,  349,
 353,  359,  367,  373,  379,  383,  389,  397,  401,  409,
 419,  421,  431,  433,  439,  443,  449,  457,  461,  463,
 467,  479,  487,  491,  499,  503,  509,  521,  523,  541,
 547,  557,  563,  569,  571,  577,  587,  593,  599,  601,
 607,  613,  617,  619,  631,  641,  643,  647,  653,  659,
 661,  673,  677,  683,  691,  701,  709,  719,  727,  733,
 739,  743,  751,  757,  761,  769,  773,  787,  797,  809,
 811,  821,  823,  827,  829,  839,  853,  857,  859,  863,
 877,  881,  883,  887,  907,  911,  919,  929,  937,  941,
 947,  953,  967,  971,  977,  983,  991,  997,
C:\dmd\MKOD_ex>

Mars: fourth Rock from the Sun.