Problem 5 solution  Naive algorithm (Improved over problem_5/sol1.c)
More...
#include <stdio.h>
#include <stdlib.h>

static int  check_number (unsigned long long n) 
 Checks if a given number is devisable by every number between 1 and 20.


int  main (void) 
 Main function.



static unsigned int  divisors [] 
 Hack to store divisors between 1 & 20.


Problem 5 solution  Naive algorithm (Improved over problem_5/sol1.c)
Little bit improved version of the naive problem_5/sol1.c
. Since the number has to be divisable by 20, we can start at 20 and go in 20 steps. Also we don't have to check against any number, since most of them are implied by other divisions (i.e. if a number is divisable by 20, it's also divisable by 2, 5, and 10). This all gives a 97% perfomance increase on my machine (9.562 vs 0.257)
 See also
 Slower: problem_5/sol1.c

Faster: problem_5/sol3.c
◆ check_number()
static int check_number 
( 
unsigned long long 
n  ) 


static 
Checks if a given number is devisable by every number between 1 and 20.
 Parameters

 Returns
 0 if not divisible

1 if divisible
31{
32 for (size_t i = 0; i < 7; ++i)
33 {
35 {
36 return 0;
37 }
38 }
39
40 return 1;
41}
static unsigned int divisors[]
Hack to store divisors between 1 & 20.
Definition sol2.c:21
◆ main()
Main function.
 Returns
 0 on exit
49{
50 for (unsigned long long n = 20;; n += 20)
51 {
53 {
54 printf("Result: %llu\n", n);
55 break;
56 }
57 }
58 return 0;
59}
static int check_number(unsigned long long n)
Checks if a given number is devisable by every number between 1 and 20.
Definition sol2.c:30
◆ divisors
Initial value:= {
11, 13, 14, 16, 17, 18, 19, 20,
}
Hack to store divisors between 1 & 20.
21 {
22 11, 13, 14, 16, 17, 18, 19, 20,
23};