1
0
Fork 0

Problem 43

This commit is contained in:
Jonathan Chan 2016-12-06 20:10:15 -08:00
parent f563209aad
commit 2206597e3d
2 changed files with 84 additions and 0 deletions

BIN
43 Executable file

Binary file not shown.

84
43.c Normal file
View File

@ -0,0 +1,84 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
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);
}