primes.cpp

来自「realview22.rar」· C++ 代码 · 共 156 行

CPP
156
字号
//**************************************************************
// Prime Number Generator 3.2
//
// Copyright (C) ARM Limited 1999-2002. All rights reserved.
//**************************************************************

// Calculate the nth prime number and display it, and the time 
// taken to calculate it.

#include <iostream>
#include <math.h>
#include <vector>
#include <time.h>

#if __ARMCC_VERSION >= 200000
using namespace std;
#endif

// Prime Number Calculating Function
int CalculatePrimes(vector<int,allocator<int> > prime_numbers, 
                                        int prime_count, int goal, double &Time)
{
        int square;
        int number =39;
        int remainder;
        int root = 1;
        int prime;
        clock_t Start, Finish;
                
        // Start timer
        Start = clock();
                        
        while(prime_count < goal)
        {
                square = root * root;
                
                while(number > square)
                {
                        root++;
                        square = root * root;
                }
                
                for(int i=0; i < prime_count; i++)
                {
                        prime = prime_numbers[i];
                        
                        if (prime > root)
                        {
                                square = prime_count;
                                prime_numbers[square--] = number;
                                prime_count++;
                                break;
                        }
                
                        remainder = number % prime;
        
                        if (remainder == 0) 
                        {
                                //if not prime ditch number
                                break;
                        }
                }                       
                number = number + 2;
        }
        
        Finish = clock();
        
        // Calculate time taken
        Time = (double)(Finish - Start) / CLOCKS_PER_SEC;
        
        return prime_numbers[goal];
}


// Output Results Function
void OutputResults(int answer, int goal, double Time)
{
        // Output answer
        cout << "\n\nThe " << goal << "th prime number is: "
                  << answer
                  << "\n\nIt took " << Time << " seconds.";
                 
        // Debugging Information
        cout << "\n\nIf you are reading this message you have\n"
                  << "found the bug in the code!";
                 
        return;
}


//**************************************************************
// Main Program
//**************************************************************
int main(void)
{       
        int prime;
        int* answer;
        int prime_count=0;
        double Time;
        
        
        // Get data from user
        cout << "\n\nPrime Number Generator\n"
             <<"Which prime number do you wish to calculate? \n"
             << "(must be above 12): ";
        cin  >> prime;
        
        while (prime > 10000)
        {
                cout << "ERROR: There might not be enough memory available for"
                          << "\nthis many prime numbers, please choose a smaller value. \n";
                cin  >> prime;
        } 
        
        cout << "\nCalculating......";
        
        vector<int, allocator<int> > prime_numbers((prime + 1), -1);

        // Give it some to start off with
        prime_numbers[prime_count] = 2;
        prime_count++;
        prime_numbers[prime_count] = 3;
        prime_count++;
        prime_numbers[prime_count] = 5;
        prime_count++;
        prime_numbers[prime_count] = 7;
        prime_count++;
        prime_numbers[prime_count] = 11;
        prime_count++;
        prime_numbers[prime_count] = 13;
        prime_count++;
        prime_numbers[prime_count] = 17;
        prime_count++;
        prime_numbers[prime_count] = 19;
        prime_count++;
        prime_numbers[prime_count] = 23;
        prime_count++;
        prime_numbers[prime_count] = 29;
        prime_count++;
        prime_numbers[prime_count] = 31;
        prime_count++;
        prime_numbers[prime_count] = 37;
        prime_count++;
        
        // Calculate numbers
        answer = (int*) CalculatePrimes(prime_numbers, prime_count, prime, Time);
        
        // Call Output Function
        OutputResults(*answer, prime, Time);
        
        return 0;
}

// End of file

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?