diff --git a/43 b/43 new file mode 100755 index 0000000..81cb27f Binary files /dev/null and b/43 differ diff --git a/43.c b/43.c new file mode 100644 index 0000000..8893ff9 --- /dev/null +++ b/43.c @@ -0,0 +1,84 @@ +#include +#include +#include + +bool isPrimeDivisible (int* digits) { + // d2d3d4 divisible by 2 + bool value = digits[3] == 0 || + digits[3] == 2 || + digits[3] == 4 || + digits[3] == 6 || + digits[3] == 8; + + // d3d4d5 divisible by 3 + value = value && (digits[2] + digits[3] + digits[4]) % 3 == 0; + + // d4d5d6 divisible by 5 + value = value && (digits[5] == 0 || digits[5] == 5); + + // d5d6d7 divisible by 7 + value = value && (digits[6] + digits[5]*3 + digits[4]*2) % 7 == 0; + + // d6d7d8 divisible 11 + int divSum = digits[5] - digits[6] + digits[7]; + value = value && (divSum == 0 || divSum == 11); + + // d7d8d9 divisible by 13 + divSum = digits[6]*10 + digits[7] - digits[8]*9; + value = value && divSum % 13 == 0; + + // d8d9d10 divisible by 17 + divSum = digits[7]*10 + digits[8] - digits[9]*5; + value = value && divSum % 17 == 0; + + return value; +} + +long long intArrayToInt (int* array) { + return array[0] * 1000000000LL + + array[1] * 100000000LL + + array[2] * 10000000LL + + array[3] * 1000000LL + + array[4] * 100000LL + + array[5] * 10000LL + + array[6] * 1000LL + + array[7] * 100LL + + array[8] * 10LL + + array[9] * 1LL; +} + +int main () { + long long sum = 0; + int num[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; + int k = 8; + while (k >= 0) { + if (num[k] < num[k+1]) { + for (int l = 9; l > k; l--) { + if (num[k] < num[l]) { + int temp = num[l]; + num[l] = num[k]; + num[k] = temp; + + int* rev = malloc (sizeof (int) * (9 - k)); + for (int r = k + 1; r < 10; r++) { + rev[r - k - 1] = num[r]; + } + for (int r = k + 1; r < 10; r++) { + num[r] = rev[9-r]; + } + free (rev); + + if (isPrimeDivisible (num)) + sum += intArrayToInt (num); + + k = 8; + break; + } + } + } + else { + k--; + } + } + printf ("%lli\n", sum); +}