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.