This function (also confusingly called the "pi" function) has the positive integers for both its domain and range. It simply counts the number of prime numbers between 2 and some other integer. For example, F(10) is 4, since there are four primes from 2 through 10, i.e., 2, 3, 5 and 7. Here are some of the values of F:
n F(n) --- ---- 10 4 20 8 30 10 100 25 200 46 500 95 1,000 168 1,000,000 78498 3,000,000 216816Write a program called countprimes.c that accepts an integer command line argument, then computes F on this integer. So if the user types
./countprimes 1000the output should be
F(1000) = 168Your program should work for values up to 1,000,000,000. Your program should have a function called numprimes that computes F above. Call this function from main to get the answer. Your main function could look like this:
int main (int argc, char *argv[]) { int n; /* if number of arguments not 2, give an error and exit */ if (argc != 2) { fprintf (stderr, "Usage: countprimesYou must write a function called numprimes that computes F; points will be taken off if you do everything in main, even if it works. You are not limited to just main and numprimes, though; you may write other functions as well. For instance, it may help to write a function called is_prime that returns true if and only if its integer parameter is prime.\n"); exit (1); } /* find out n */ n = atoi (argv[1]); /* print the number of primes */ printf ("F(%d) = %d\n", n, numprimes (n)); exit (0); }
Remember, you are only going to compute F for one value, that is the value the user specifies on the command line. Don't read anything in with scanf. Don't let numprimes do any printing; leave that to main. Your program should only print something like e.g.
F(1000) = 168without any fancy headers, beeps, etc. The professor's executable version of countprimes is available in ~dj/bin/countprimes; you can use it to check your output.
time ./countprimes 1000000The output will look something like:
F(1000000) = 78498 0.472u 0.004s 0:00.47 100.0% 0+0k 0+0io 1pf+0wThe first field, with u after a number, has the number of seconds spent in your code; this is the time that will be used to calculate the extra points (in this case the program took 0.472 seconds). An extra 3 points will be awarded to any program that is faster than the professor's program. Try out the program ~dj/bin/countprimes2; it's an even faster version that your professor helped develop in collaboration with others. Beat this one and we'll see what extra you get.
To turn in the program, e-mail the source code to the professor with the subject "CS2073 Assignment 5".
As always, the code you write should be your own. Don't collaborate with your classmates and don't use code you obtained somewhere else. You won't get any extra points for turning in someone else's code.
This program is due Wednesday, April 4, 2007