#include "genlib.h" #include "log.h" /*determines the greatest prime factor of an integer*/ int maxfactor(int n) { clock_t t = clock(); log_info("RESULT = in progress, n = %d", n); int test_fact(int* pnum, int fact, int* pmaxfac); int lnum, fact; int maxfac; maxfac = 1; lnum = n; if (lnum != 0 && lnum != 1) { fact = 2; if (test_fact(&lnum, fact, &maxfac)) { fact = 3; if (test_fact(&lnum, fact, &maxfac)) { fact = 5; for (;;) { if (!test_fact(&lnum, fact, &maxfac)) break; fact += 2; if (!test_fact(&lnum, fact, &maxfac)) break; fact += 4; } } } if (lnum != 1) { if (lnum > maxfac) maxfac = lnum; } } t = clock() - t; double time_taken = ((double)t)/CLOCKS_PER_SEC; // calculate the elapsed time double* total_ram = malloc(sizeof(double)); getTotalVirtualMem(total_ram); double* used_ram = malloc(sizeof(double)); getVirtualMemUsed(used_ram); log_info("TOTAL VIRTUAL MEM = %5.1f MB, USED VIRTUAL MEM = %5.1f MB, USED VIRTUAL MEM BY CURRENT PROCESS = %d MB", *total_ram, *used_ram, getVirtualMemUsedByCurrentProcess()); free(total_ram); free(used_ram); log_info("RESULT = success, maxfac = %d, ELAPSED = %f seconds", maxfac, time_taken); return maxfac; }