Lab 10-30-01
#include <math.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int is_prime(int n);
int fib(int);
int is_fib_prime(int n);
int flipCoin();
int longestHeads(int);
int longestAlternating(int);
#define HEADS 1
#define TAILS 0
#define MAX_TRIALS 100000000
void main(void) {
int trials = MAX_TRIALS;
int count;
srand(time(NULL));
count = longestHeads(trials);
printf("longest sequence of heads was %d\n", count);
count = longestAlternating(trials);
printf("longest alternating sequence of heads and tails was %d\n", count);
/* fib prime stuff
int i;
for (i = 1; i <= 36; i++) {
//printf("fib(%d) = %d\n", i, fib(i) );
int theFib = fib(i);
if (is_prime(theFib))
printf("fib(%d) = %d is prime\n", i, theFib);
}
*/
}
int longestAlternating(int howMany) {
int storedFlip;
int lastFlip;
int longestRun = 0;
int counter = 0;
int i;
storedFlip = flipCoin();
for(i = 2; i <= howMany; i++) {
lastFlip = flipCoin();
if (storedFlip != lastFlip) {
counter++;
storedFlip = lastFlip;
}
else {
if (counter > longestRun) {
longestRun = counter;
}
counter = 0;
}
}
return longestRun;
}
int longestHeads(int howMany) {
int longestRun = 0;
int currentHeadCount = 0;
int i;
for(i = 1; i <= howMany; i++) {
int coin = flipCoin();
if (coin == HEADS) {
currentHeadCount++;
}
else {
if (currentHeadCount > longestRun) {
longestRun = currentHeadCount;
}
currentHeadCount = 0;
}
}
return longestRun;
}
int flipCoin() {
return rand() % 2;
}
int is_fib_prime(int n) {
return is_prime( fib(n) );
}
int fib(int n) {
int answer;
if (n == 1)
answer = 0;
else if (n == 2)
answer = 1;
else
answer = fib(n - 2) + fib(n - 1);
return answer;
}
/*
is_prime
This function will return t/f whether or
not the integer passed in is prime or not.
input: integer
output: 0 or non-zero
*/
int is_prime(int n) {
int divisor = 2;
while (divisor <= sqrt(n) &&
(n % divisor != 0) ) {
divisor++;
}
return n % divisor || n == 2;
}