1
0
Fork 0

11: C: Get LCM by prime factorization

This commit is contained in:
Mia Herkt 2022-12-12 00:08:30 +01:00
parent 05f53d07c8
commit b38eab7062
Signed by: mia
GPG Key ID: 72E154B8622EC191
1 changed files with 18 additions and 3 deletions

View File

@ -1,6 +1,7 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
typedef struct Monkey {
unsigned long business;
@ -26,9 +27,23 @@ unsigned long monkey_business(Monkey *monkeys, int count, int steps, int part2)
monkeys = copy;
unsigned long lcm = 1;
if (part2)
for (int m = 0; m < count; m++)
lcm *= monkeys[m].test; // these are all primes
if (part2) {
for (int m = 0; m < count; m++) {
unsigned long v = monkeys[m].test;
while (!(v % 2)) {
lcm *= 2;
v /= 2;
}
for (unsigned long i = 3; i <= sqrt(v); i += 3) {
while (!(v % i)) {
lcm *= i;
v /= i;
}
}
if (v > 2)
lcm *= v;
}
}
for (int s = 0; s < steps; s++) {
for (int m = 0; m < count; m++) {