1
0
Fork 0

Initial commit

This commit is contained in:
Andrew Tomaka 2012-04-05 05:32:56 -04:00
commit ceaf6f24eb
52 changed files with 2295 additions and 0 deletions

17
C/1-a.c Executable file
View file

@ -0,0 +1,17 @@
#include <stdio.h>
// If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
// Find the sum of all the multiples of 3 or 5 below 1000.
void main() {
int sum = 0;
int i = 0;
for(i = 1; i < 1000; i++) {
if(i % 3 == 0 || i % 5 == 0) {
printf("%d, ", i);
sum += i;
}
}
printf("\n\nSum: %d", sum);
}

41
C/10-a.c Executable file
View file

@ -0,0 +1,41 @@
#include <stdio.h>
#include <math.h>
// The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
// Find the sum of all the primes below two million.
int main() {
long long sum = 0;
int primes = 0;
int i = 2;
while(i < 2000000) {
if(isPrime(i) == 1) {
sum += i;
primes++;
}
if(i == 2) {
i = 3;
} else {
i = i + 2;
}
}
printf("%d primes sum: '%lld'\n\n", primes, sum);
return 1;
}
int isPrime(int number) {
int i;
for(i = 3; i < (int)sqrt(number) + 1; i = i + 2) {
if(number % i == 0 && i != number) {
return 0;
}
}
return 1;
}

57
C/10-b.c Executable file
View file

@ -0,0 +1,57 @@
#include <stdio.h>
#include <math.h>
// The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
// Find the sum of all the primes below two million.
#define TABLE 100000
int isPrime(int, int, int*);
int main() {
long long sum = 0;
int primesCount = 0, totalPrimes = 0;
int primes[TABLE] = {0};
int i = 2;
while(i < 20000000) {
if(isPrime(i, primesCount, primes) == 1) {
if(primesCount < TABLE) {
primes[primesCount++] = i;
}
sum += i;
totalPrimes++;
}
if(i == 2) {
i = 3;
} else {
i = i + 2;
}
}
printf("%d primes sum: '%lld'\n\n", totalPrimes, sum);
return 1;
}
int isPrime(int number, int primesCount, int *primes) {
int i;
for(i = 0; i < primesCount && primes[i] * primes[i] <= number; i++) {
if(number % primes[i] == 0 && number != primes[i]) {
return 0;
}
}
if(i > 0) {
for(i = (primes[i - 1] | 1); i * i <= number; i = i + 2) {
if(number % i == 0 && i != number) {
return 0;
}
}
}
return 1;
};

29
C/10-c.c Executable file
View file

@ -0,0 +1,29 @@
#include <stdio.h>
#define LENGTH 1000
void main() {
long long sum = 0;
int numbers[LENGTH + 1] = {0};
int i = 1, j;
while(i < LENGTH) {
if(numbers[i] == 1) {
continue;
}
for(j = 1; i * j < LENGTH; j++) {
numbers[i * j] = 0;
}
i++;
}
for(i = 1; i < LENGTH; i++) {
if(numbers[i] == 0) {
sum += i;
}
}
printf("SUM: %lld", sum);
}

46
C/10-chira.c Executable file
View file

@ -0,0 +1,46 @@
#include <stdio.h>
// The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
// Find the sum of all the primes below two million.
#define MAX_PRIMES 100000
int isPrime(int, int, int*);
int main() {
long long sum = 2;
int primesCount = 0, ct = 0;
int primes[MAX_PRIMES];
int i = 3;
while(i < 20000000) {
if(isPrime(i, primesCount, primes) == 1) {
if (primesCount < MAX_PRIMES)
primes[primesCount++] = i;
sum += i;
ct++;
}
i = i + 2;
}
printf("%d primes sum: '%lld'\n", ct, sum);
return 1;
}
int isPrime(int number, int primesCount, int *primes) {
int i;
for(i = 0; i < primesCount && primes[i]*primes[i] <= number; i++)
if(number % primes[i] == 0)
return 0;
if (i > 0)
for(i = (primes[i-1]|1); i*i <= number; i = i + 2)
if(number % i == 0)
return 0;
return 1;
}

31
C/10-lindoc.c Executable file
View file

@ -0,0 +1,31 @@
#include <stdlib.h>
#include <stdio.h>
void main (void){
long long topValue = 2000000;
int array[topValue+1];
long long sum = 2;
// all number are prime
for(long long i=3; i <= topValue;i += 2 ){
array[i] = 1;
}
for(long long prime = 3; prime <= topValue;prime += 2){
if (array[prime]){
for(long long multiple = prime * prime; multiple <= topValue; multiple += prime){
if(array[multiple])
array[multiple] = 0;
}
}
}
for (long long i = 3; i <= topValue; i += 2){
if(array[i]){
sum += i;
}
}
printf("Sum is %lld\n", sum);
}

20
C/11-MyrddinE.html Executable file
View file

@ -0,0 +1,20 @@
<table><tr><td><font color="#ffffff">08</font></td><td><font color="#ffffff">02</font></td><td><font color="#f8f8f8">22</font></td><td><font color="#e0e0e0">97</font></td><td><font color="#ededed">38</font></td><td><font color="#fbfbfb">15</font></td><td><font color="#ffffff">0</font></td><td><font color="#f9f9f9">40</font></td><td><font color="#ffffff">0</font></td><td><font color="#f3f3f3">75</font></td><td><font color="#fefefe">04</font></td><td><font color="#fdfdfd">05</font></td><td><font color="#fbfbfb">07</font></td><td><font color="#c0c0c0">78</font></td><td><font color="#d5d5d5">52</font></td><td><font color="#f6f6f6">12</font></td><td><font color="#d7d7d7">50</font></td><td><font color="#cecece">77</font></td><td><font color="#d3d3d3">91</font></td><td><font color="#fdfdfd">08</font></td></tr>
<tr><td><font color="#f8f8f8">49</font></td><td><font color="#e8e8e8">49</font></td><td><font color="#bfbfbf">99</font></td><td><font color="#d9d9d9">40</font></td><td><font color="#eaeaea">17</font></td><td><font color="#a4a4a4">81</font></td><td><font color="#ebebeb">18</font></td><td><font color="#c8c8c8">57</font></td><td><font color="#bcbcbc">60</font></td><td><font color="#9d9d9d">87</font></td><td><font color="#eaeaea">17</font></td><td><font color="#cccccc">40</font></td><td><font color="#818181">98</font></td><td><font color="#c8c8c8">43</font></td><td><font color="#a6a6a6">69</font></td><td><font color="#c1c1c1">48</font></td><td><font color="#fbfbfb">04</font></td><td><font color="#d2d2d2">56</font></td><td><font color="#d7d7d7">62</font></td><td><font color="#ffffff">0</font></td></tr>
<tr><td><font color="#e5e5e5">81</font></td><td><font color="#e0e0e0">49</font></td><td><font color="#dcdcdc">31</font></td><td><font color="#959595">73</font></td><td><font color="#a7a7a7">55</font></td><td><font color="#737373">79</font></td><td><font color="#ebebeb">14</font></td><td><font color="#cccccc">29</font></td><td><font color="#787878">93</font></td><td><font color="#818181">71</font></td><td><font color="#bfbfbf">40</font></td><td><font color="#888888">67</font></td><td><font color="#a1a1a1">53</font></td><td><font color="#636363">88</font></td><td><font color="#cacaca">30</font></td><td><font color="#fafafa">03</font></td><td><font color="#a8a8a8">49</font></td><td><font color="#ededed">13</font></td><td><font color="#e2e2e2">36</font></td><td><font color="#eaeaea">65</font></td></tr>
<tr><td><font color="#e6e6e6">52</font></td><td><font color="#bcbcbc">70</font></td><td><font color="#757575">95</font></td><td><font color="#d7d7d7">23</font></td><td><font color="#f6f6f6">04</font></td><td><font color="#818181">60</font></td><td><font color="#e8e8e8">11</font></td><td><font color="#a0a0a0">42</font></td><td><font color="#6f6f6f">69</font></td><td><font color="#cdcdcd">24</font></td><td><font color="#666666">68</font></td><td><font color="#8a8a8a">56</font></td><td><font color="#fdfdfd">01</font></td><td><font color="#b7b7b7">32</font></td><td><font color="#818181">56</font></td><td><font color="#5f5f5f">71</font></td><td><font color="#acacac">37</font></td><td><font color="#fcfcfc">02</font></td><td><font color="#d1d1d1">36</font></td><td><font color="#d3d3d3">91</font></td></tr>
<tr><td><font color="#f1f1f1">22</font></td><td><font color="#dcdcdc">31</font></td><td><font color="#e6e6e6">16</font></td><td><font color="#6a6a6a">71</font></td><td><font color="#7c7c7c">51</font></td><td><font color="#525252">67</font></td><td><font color="#676767">63</font></td><td><font color="#191919">89</font></td><td><font color="#9c9c9c">41</font></td><td><font color="#121212">92</font></td><td><font color="#a8a8a8">36</font></td><td><font color="#747474">54</font></td><td><font color="#cacaca">22</font></td><td><font color="#989898">40</font></td><td><font color="#989898">40</font></td><td><font color="#b7b7b7">28</font></td><td><font color="#5f5f5f">66</font></td><td><font color="#bababa">33</font></td><td><font color="#eaeaea">13</font></td><td><font color="#bfbfbf">80</font></td></tr>
<tr><td><font color="#f0f0f0">24</font></td><td><font color="#cacaca">47</font></td><td><font color="#cccccc">32</font></td><td><font color="#818181">60</font></td><td><font color="#000000">99</font></td><td><font color="#f8f8f8">03</font></td><td><font color="#8b8b8b">45</font></td><td><font color="#fafafa">02</font></td><td><font color="#8e8e8e">44</font></td><td><font color="#4a4a4a">75</font></td><td><font color="#aaaaaa">33</font></td><td><font color="#767676">53</font></td><td><font color="#363636">78</font></td><td><font color="#a2a2a2">36</font></td><td><font color="#262626">84</font></td><td><font color="#cccccc">20</font></td><td><font color="#ababab">35</font></td><td><font color="#dcdcdc">17</font></td><td><font color="#ececec">12</font></td><td><font color="#cfcfcf">50</font></td></tr>
<tr><td><font color="#ebebeb">32</font></td><td><font color="#919191">98</font></td><td><font color="#8a8a8a">81</font></td><td><font color="#c5c5c5">28</font></td><td><font color="#5a5a5a">64</font></td><td><font color="#c8c8c8">23</font></td><td><font color="#525252">67</font></td><td><font color="#e6e6e6">10</font></td><td><font color="#c5c5c5">26</font></td><td><font color="#a3a3a3">38</font></td><td><font color="#989898">40</font></td><td><font color="#525252">67</font></td><td><font color="#707070">59</font></td><td><font color="#747474">54</font></td><td><font color="#4a4a4a">70</font></td><td><font color="#6a6a6a">66</font></td><td><font color="#d1d1d1">18</font></td><td><font color="#b0b0b0">38</font></td><td><font color="#989898">64</font></td><td><font color="#b0b0b0">70</font></td></tr>
<tr><td><font color="#d4d4d4">67</font></td><td><font color="#e2e2e2">26</font></td><td><font color="#dfdfdf">20</font></td><td><font color="#878787">68</font></td><td><font color="#fafafa">02</font></td><td><font color="#737373">62</font></td><td><font color="#e0e0e0">12</font></td><td><font color="#d5d5d5">20</font></td><td><font color="#000000">95</font></td><td><font color="#5d5d5d">63</font></td><td><font color="#2b2b2b">94</font></td><td><font color="#9b9b9b">39</font></td><td><font color="#717171">63</font></td><td><font color="#ebebeb">08</font></td><td><font color="#ababab">40</font></td><td><font color="#141414">91</font></td><td><font color="#5f5f5f">66</font></td><td><font color="#999999">49</font></td><td><font color="#686868">94</font></td><td><font color="#e8e8e8">21</font></td></tr>
<tr><td><font color="#f0f0f0">24</font></td><td><font color="#c1c1c1">55</font></td><td><font color="#a2a2a2">58</font></td><td><font color="#f5f5f5">05</font></td><td><font color="#757575">66</font></td><td><font color="#666666">73</font></td><td><font color="#3f3f3f">99</font></td><td><font color="#bcbcbc">26</font></td><td><font color="#000000">97</font></td><td><font color="#d6d6d6">17</font></td><td><font color="#363636">78</font></td><td><font color="#5c5c5c">78</font></td><td><font color="#363636">96</font></td><td><font color="#5f5f5f">83</font></td><td><font color="#dbdbdb">14</font></td><td><font color="#383838">88</font></td><td><font color="#a8a8a8">34</font></td><td><font color="#454545">89</font></td><td><font color="#9a9a9a">63</font></td><td><font color="#aeaeae">72</font></td></tr>
<tr><td><font color="#f2f2f2">21</font></td><td><font color="#d7d7d7">36</font></td><td><font color="#e2e2e2">23</font></td><td><font color="#efefef">09</font></td><td><font color="#626262">75</font></td><td><font color="#ffffff">0</font></td><td><font color="#6c6c6c">76</font></td><td><font color="#a3a3a3">44</font></td><td><font color="#d2d2d2">20</font></td><td><font color="#9a9a9a">45</font></td><td><font color="#bcbcbc">35</font></td><td><font color="#e2e2e2">14</font></td><td><font color="#ffffff">0</font></td><td><font color="#898989">61</font></td><td><font color="#cacaca">33</font></td><td><font color="#242424">97</font></td><td><font color="#adadad">34</font></td><td><font color="#bebebe">31</font></td><td><font color="#cacaca">33</font></td><td><font color="#949494">95</font></td></tr>
<tr><td><font color="#cdcdcd">78</font></td><td><font color="#ececec">17</font></td><td><font color="#bbbbbb">53</font></td><td><font color="#c5c5c5">28</font></td><td><font color="#d5d5d5">22</font></td><td><font color="#6e6e6e">75</font></td><td><font color="#c3c3c3">31</font></td><td><font color="#525252">67</font></td><td><font color="#d9d9d9">15</font></td><td><font color="#000000">94</font></td><td><font color="#f8f8f8">03</font></td><td><font color="#7e7e7e">80</font></td><td><font color="#f8f8f8">04</font></td><td><font color="#afafaf">62</font></td><td><font color="#d6d6d6">16</font></td><td><font color="#dbdbdb">14</font></td><td><font color="#e8e8e8">09</font></td><td><font color="#909090">53</font></td><td><font color="#a5a5a5">56</font></td><td><font color="#979797">92</font></td></tr>
<tr><td><font color="#f5f5f5">16</font></td><td><font color="#dadada">39</font></td><td><font color="#fafafa">05</font></td><td><font color="#bcbcbc">42</font></td><td><font color="#000000">96</font></td><td><font color="#b6b6b6">35</font></td><td><font color="#afafaf">31</font></td><td><font color="#9d9d9d">47</font></td><td><font color="#717171">55</font></td><td><font color="#737373">58</font></td><td><font color="#555555">88</font></td><td><font color="#cdcdcd">24</font></td><td><font color="#ffffff">0</font></td><td><font color="#dfdfdf">17</font></td><td><font color="#a8a8a8">54</font></td><td><font color="#c9c9c9">24</font></td><td><font color="#a8a8a8">36</font></td><td><font color="#c3c3c3">29</font></td><td><font color="#767676">85</font></td><td><font color="#bfbfbf">57</font></td></tr>
<tr><td><font color="#c8c8c8">86</font></td><td><font color="#c9c9c9">56</font></td><td><font color="#ffffff">0</font></td><td><font color="#b2b2b2">48</font></td><td><font color="#b6b6b6">35</font></td><td><font color="#767676">71</font></td><td bgcolor="#ffeeee"><font color="#282828">89</font></td><td><font color="#ededed">07</font></td><td><font color="#f4f4f4">05</font></td><td><font color="#959595">44</font></td><td><font color="#8e8e8e">44</font></td><td><font color="#b2b2b2">37</font></td><td><font color="#aaaaaa">44</font></td><td><font color="#8b8b8b">60</font></td><td><font color="#c9c9c9">21</font></td><td><font color="#7c7c7c">58</font></td><td><font color="#7c7c7c">51</font></td><td><font color="#8e8e8e">54</font></td><td><font color="#e4e4e4">17</font></td><td><font color="#bebebe">58</font></td></tr>
<tr><td><font color="#f3f3f3">19</font></td><td><font color="#b2b2b2">80</font></td><td><font color="#b1b1b1">81</font></td><td><font color="#929292">68</font></td><td><font color="#f3f3f3">05</font></td><td bgcolor="#ffeeee"><font color="#1c1c1c">94</font></td><td><font color="#868686">47</font></td><td><font color="#4d4d4d">69</font></td><td><font color="#b7b7b7">28</font></td><td><font color="#4f4f4f">73</font></td><td><font color="#2f2f2f">92</font></td><td><font color="#dedede">13</font></td><td><font color="#4b4b4b">86</font></td><td><font color="#797979">52</font></td><td><font color="#dcdcdc">17</font></td><td><font color="#383838">77</font></td><td><font color="#f6f6f6">04</font></td><td><font color="#454545">89</font></td><td><font color="#a7a7a7">55</font></td><td><font color="#d2d2d2">40</font></td></tr>
<tr><td><font color="#fdfdfd">04</font></td><td><font color="#c5c5c5">52</font></td><td><font color="#f6f6f6">08</font></td><td><font color="#515151">83</font></td><td bgcolor="#ffeeee"><font color="#343434">97</font></td><td><font color="#a5a5a5">35</font></td><td><font color="#000000">99</font></td><td><font color="#d6d6d6">16</font></td><td><font color="#ededed">07</font></td><td><font color="#141414">97</font></td><td><font color="#6c6c6c">57</font></td><td><font color="#adadad">32</font></td><td><font color="#dbdbdb">16</font></td><td><font color="#bcbcbc">26</font></td><td><font color="#bcbcbc">26</font></td><td><font color="#4d4d4d">79</font></td><td><font color="#aaaaaa">33</font></td><td><font color="#c7c7c7">27</font></td><td><font color="#616161">98</font></td><td><font color="#b5b5b5">66</font></td></tr>
<tr><td><font color="#c7c7c7">88</font></td><td><font color="#d7d7d7">36</font></td><td><font color="#a8a8a8">68</font></td><td bgcolor="#ffeeee"><font color="#494949">87</font></td><td><font color="#6c6c6c">57</font></td><td><font color="#737373">62</font></td><td><font color="#cccccc">20</font></td><td><font color="#454545">72</font></td><td><font color="#f8f8f8">03</font></td><td><font color="#898989">46</font></td><td><font color="#aaaaaa">33</font></td><td><font color="#525252">67</font></td><td><font color="#909090">46</font></td><td><font color="#717171">55</font></td><td><font color="#e0e0e0">12</font></td><td><font color="#adadad">32</font></td><td><font color="#676767">63</font></td><td><font color="#3c3c3c">93</font></td><td><font color="#aaaaaa">53</font></td><td><font color="#b1b1b1">69</font></td></tr>
<tr><td><font color="#fdfdfd">04</font></td><td><font color="#d0d0d0">42</font></td><td><font color="#e8e8e8">16</font></td><td><font color="#666666">73</font></td><td><font color="#a3a3a3">38</font></td><td><font color="#c3c3c3">25</font></td><td><font color="#a7a7a7">39</font></td><td><font color="#e5e5e5">11</font></td><td><font color="#c5c5c5">24</font></td><td><font color="#1c1c1c">94</font></td><td><font color="#515151">72</font></td><td><font color="#d4d4d4">18</font></td><td><font color="#ececec">08</font></td><td><font color="#909090">46</font></td><td><font color="#b9b9b9">29</font></td><td><font color="#b2b2b2">32</font></td><td><font color="#9f9f9f">40</font></td><td><font color="#878787">62</font></td><td><font color="#919191">76</font></td><td><font color="#dddddd">36</font></td></tr>
<tr><td><font color="#f6f6f6">20</font></td><td><font color="#c8c8c8">69</font></td><td><font color="#d1d1d1">36</font></td><td><font color="#bdbdbd">41</font></td><td><font color="#747474">72</font></td><td><font color="#c5c5c5">30</font></td><td><font color="#d3d3d3">23</font></td><td><font color="#555555">88</font></td><td><font color="#bebebe">34</font></td><td><font color="#878787">62</font></td><td><font color="#3f3f3f">99</font></td><td><font color="#7a7a7a">69</font></td><td><font color="#606060">82</font></td><td><font color="#7e7e7e">67</font></td><td><font color="#8d8d8d">59</font></td><td><font color="#5b5b5b">85</font></td><td><font color="#707070">74</font></td><td><font color="#f9f9f9">04</font></td><td><font color="#d7d7d7">36</font></td><td><font color="#f3f3f3">16</font></td></tr>
<tr><td><font color="#f9f9f9">20</font></td><td><font color="#d0d0d0">73</font></td><td><font color="#e3e3e3">35</font></td><td><font color="#dfdfdf">29</font></td><td><font color="#8e8e8e">78</font></td><td><font color="#d2d2d2">31</font></td><td><font color="#7d7d7d">90</font></td><td><font color="#fefefe">01</font></td><td><font color="#949494">74</font></td><td><font color="#d2d2d2">31</font></td><td><font color="#b8b8b8">49</font></td><td><font color="#989898">71</font></td><td><font color="#bababa">48</font></td><td><font color="#828282">86</font></td><td><font color="#8a8a8a">81</font></td><td><font color="#e8e8e8">16</font></td><td><font color="#dedede">23</font></td><td><font color="#bfbfbf">57</font></td><td><font color="#fbfbfb">05</font></td><td><font color="#dddddd">54</font></td></tr>
<tr><td><font color="#ffffff">01</font></td><td><font color="#e9e9e9">70</font></td><td><font color="#e5e5e5">54</font></td><td><font color="#d2d2d2">71</font></td><td><font color="#afafaf">83</font></td><td><font color="#cecece">51</font></td><td><font color="#cbcbcb">54</font></td><td><font color="#bdbdbd">69</font></td><td><font color="#f0f0f0">16</font></td><td><font color="#a6a6a6">92</font></td><td><font color="#dfdfdf">33</font></td><td><font color="#d1d1d1">48</font></td><td><font color="#c4c4c4">61</font></td><td><font color="#d6d6d6">43</font></td><td><font color="#cdcdcd">52</font></td><td><font color="#ffffff">01</font></td><td><font color="#a9a9a9">89</font></td><td><font color="#f0f0f0">19</font></td><td><font color="#d4d4d4">67</font></td><td><font color="#e8e8e8">48</font></td></tr></table>

241
C/11-a.c Executable file
View file

@ -0,0 +1,241 @@
#include <stdio.h>
#include <string.h>
// In the 2020 grid below, four numbers along a diagonal line have been marked in red.
// 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
// 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
// 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
// 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
// 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
// 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
// 32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
// 67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
// 24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
// 21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
// 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
// 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
// 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
// 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
// 04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
// 88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
// 04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
// 20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
// 20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
// 01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
// The product of these numbers is 26 63 78 14 = 1788696.
// What is the greatest product of four adjacent numbers in any direction (up, down, left, right, or diagonally) in the 2020 grid?
int getValue(int);
int main() {
int i, k;
int greatestProduct = 0;
int greatestValues[4] = {0};
int greatestStart = 0;
int greatestDirection = 0;
for(i = 0; i < 400; i++) {
//row and column conversion
int row = (int)(i / 20 + 0.5);
int col = i % 20;
// check left/right straight line
if(col >= 3 && col <= 16) {
int values[4] = {
getValue(i),
getValue(i - 1),
getValue(i - 2),
getValue(i - 3),
};
int currentProduct = 1;
for(k = 0; k < 4; k++) {
currentProduct *= values[k];
}
if(currentProduct > greatestProduct) {
greatestProduct = currentProduct;
memcpy(greatestValues, values, 4);
greatestStart = i;
greatestDirection = 1;
}
}
//check up straight line
if(row >= 3) {
int values[4] = {
getValue(i),
getValue(i - 20 * 1),
getValue(i - 20 * 2),
getValue(i - 20 * 3),
};
int currentProduct = 1;
for(k = 0; k < 4; k++) {
currentProduct *= values[k];
}
if(currentProduct > greatestProduct) {
greatestProduct = currentProduct;
memcpy(greatestValues, values, 4);
greatestStart = i;
greatestDirection = 2;
}
}
//check down straight line
if(row <= 16) {
int values[4] = {
getValue(i),
getValue(i + 20 * 1),
getValue(i + 20 * 2),
getValue(i + 20 * 3),
};
int currentProduct = 1;
for(k = 0; k < 4; k++) {
currentProduct *= values[k];
}
if(currentProduct > greatestProduct) {
greatestProduct = currentProduct;
memcpy(greatestValues, values, 4);
greatestStart = i;
greatestDirection = 3;
}
}
// then check up/left diagnal
if(row >= 3 && col >= 3) {
int values[4] = {
getValue(i),
getValue(i - 21 * 1),
getValue(i - 21 * 2),
getValue(i - 21 * 3),
};
int currentProduct = 1;
for(k = 0; k < 4; k++) {
currentProduct *= values[k];
}
if(currentProduct > greatestProduct) {
greatestProduct = currentProduct;
memcpy(greatestValues, values, 4);
greatestStart = i;
greatestDirection = 4;
}
}
// then check down/right diagnal
if(row <= 16 && col <= 16) {
int values[4] = {
getValue(i),
getValue(i + 21 * 1),
getValue(i + 21 * 2),
getValue(i + 21 * 3),
};
int currentProduct = 1;
for(k = 0; k < 4; k++) {
currentProduct *= values[k];
}
if(currentProduct > greatestProduct) {
greatestProduct = currentProduct;
memcpy(greatestValues, values, 4);
greatestStart = i;
greatestDirection = 5;
}
}
// then check up/right diagnal
if(row >= 3 && col <= 16) {
int values[4] = {
getValue(i),
getValue(i - 19 * 1),
getValue(i - 19 * 2),
getValue(i - 19 * 3),
};
int currentProduct = 1;
for(k = 0; k < 4; k++) {
currentProduct *= values[k];
}
if(currentProduct > greatestProduct) {
greatestProduct = currentProduct;
memcpy(greatestValues, values, 4);
greatestStart = i;
greatestDirection = 6;
}
}
// then check down/left diagnal
if(row <= 16 && col >= 3) {
int values[4] = {
getValue(i),
getValue(i + 19 * 1),
getValue(i + 19 * 2),
getValue(i + 19 * 3),
};
int currentProduct = 1;
for(k = 0; k < 4; k++) {
currentProduct *= values[k];
}
if(currentProduct > greatestProduct) {
greatestProduct = currentProduct;
memcpy(greatestValues, values, 4);
greatestStart = i;
greatestDirection = 7;
}
}
}
printf("%d\n", greatestProduct);
printf("Starting at: %d @ ", greatestStart);
int startRow = (int)(greatestStart / 20 + 0.5);
int startCol = greatestStart % 20;
printf("%d, %d going in direction %d\n", startRow, startCol, greatestDirection);
printf("getValue(%d): %d\n", greatestStart, getValue(greatestStart));
printf("Values: ");
for(i = 0; i < 4; i++) {
printf("%d, ", greatestValues[i]);
}
return 0;
}
int getValue(int number) {
static int numbersTable[20][20] = {
{8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8},
{49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 4, 56, 62, 0},
{81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 3, 49, 13, 36, 65},
{52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91},
{22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80},
{24, 47, 32, 60, 99, 3, 45, 2, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50},
{32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70},
{67, 26, 20, 68, 2, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21},
{24, 55, 58, 5, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72},
{21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95},
{78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92},
{16, 39, 5, 42, 96, 35, 31, 47, 55, 58, 88, 24, 0, 17, 54, 24, 36, 29, 85, 57},
{86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58},
{19, 80, 81, 68, 5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 4, 89, 55, 40},
{4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66},
{88, 36, 68, 87, 57, 62, 20, 72, 3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69},
{4, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36},
{20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 4, 36, 16},
{20, 73, 35, 29, 78, 31, 90, 1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 5, 54},
{1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 1, 89, 19, 67, 48},
};
int row = (int)(number / 20 + 0.5);
int col = number % 20;
return numbersTable[row][col];
}

97
C/11-b.c Executable file
View file

@ -0,0 +1,97 @@
#include <stdio.h>
int getValue(int);
int main() {
int i, j, current, greatestI, greatestDir;
int greatest = 0;
for(i = 0; i < 400; i++) {
//check left/right straight line
for(j = i - 3; j <= i; j++) {
if(j < 0) continue;
if(i + 3 >= 400) break;
current = getValue(i) * getValue(i + 1) * getValue(i + 2) * getValue(i + 3);
if(current > greatest) {
greatest = current;
greatestI = i;
greatestDir = 1;
}
}
//check up/down straight line
for(j = i - (20 * 3); j <= i; j += 20) {
if(j < 0) continue;
if(i + 20 * 3 >= 400) break;
current = getValue(i) * getValue(i + 20 * 1) * getValue(i + 20 * 2) * getValue(i + 20 * 3);
if(current > greatest) {
greatest = current;
greatestI = i;
greatestDir = 2;
}
}
//check backslash
for(j = i - (21 * 3); j <= i; j += 21) {
if(j < 0) continue;
if(i + 21 * 3 >= 400) break;
current = getValue(i) * getValue(i + 21 * 1) * getValue(i + 21 * 2) * getValue(i + 21 * 3);
if(current > greatest) {
greatest = current;
greatestI = i;
greatestDir = 3;
}
}
// check /
for(j = i - (19 * 3); j <= i; j += 19) {
if(j < 0) continue;
if(i + 19 * 3 >= 400) break;
current = getValue(i) * getValue(i + 19 * 1) * getValue(i + 19 * 2) * getValue(i + 19 * 3);
if(current > greatest) {
greatest = current;
greatestI = i;
greatestDir = 4;
}
}
}
printf("Greatest Product: %d @ %d going %d", greatest, greatestI, greatestDir);
return 1;
}
int getValue(int number) {
static int numbersTable[20][20] = {
{8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8},
{49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 4, 56, 62, 0},
{81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 3, 49, 13, 36, 65},
{52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91},
{22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80},
{24, 47, 32, 60, 99, 3, 45, 2, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50},
{32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70},
{67, 26, 20, 68, 2, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21},
{24, 55, 58, 5, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72},
{21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95},
{78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92},
{16, 39, 5, 42, 96, 35, 31, 47, 55, 58, 88, 24, 0, 17, 54, 24, 36, 29, 85, 57},
{86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58},
{19, 80, 81, 68, 5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 4, 89, 55, 40},
{4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66},
{88, 36, 68, 87, 57, 62, 20, 72, 3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69},
{4, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36},
{20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 4, 36, 16},
{20, 73, 35, 29, 78, 31, 90, 1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 5, 54},
{1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 1, 89, 19, 67, 48},
};
int row = (int)(number / 20);
int col = number % 20;
return numbersTable[row][col];
}

65
C/12-a.c Executable file
View file

@ -0,0 +1,65 @@
#include <stdio.h>
// The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:
// 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
// Let us list the factors of the first seven triangle numbers:
// 1: 1
// 3: 1,3
// 6: 1,2,3,6
// 10: 1,2,5,10
// 15: 1,3,5,15
// 21: 1,3,7,21
// 28: 1,2,4,7,14,28
// We can see that 28 is the first triangle number to have over five divisors.
// What is the value of the first triangle number to have over five hundred divisors?
//first attempt 29 minutes, 40 seconds
//second attempt: 13 minutes, 32 seconds
int countDivisors(long long);
int main() {
int i = 1;
int j;
long long triNumber;
while(1) {
if(i % 500 == 0) {
printf("On iteration %d: \n", i);
}
//find the current tri number
triNumber = ((i + 1) * i) / 2;
i++;
if(triNumber % 2 == 1) continue;
int divisors = countDivisors(triNumber);
if(divisors > 200) {
printf("%lld (%d divisors)\n", triNumber, divisors);
}
if(divisors > 500) break;
if(i < 0) break;
}
printf("\n%lld", triNumber);
return 1;
}
int countDivisors(long long number) {
int i;
int divisors = 0;
for(i = 1; i * 2 <= number; i++) {
if(number % i == 0) {
divisors++;
}
}
return divisors + 1;
}

89
C/12-b.c Executable file
View file

@ -0,0 +1,89 @@
#include <stdio.h>
// The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:
// 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
// Let us list the factors of the first seven triangle numbers:
// 1: 1
// 3: 1,3
// 6: 1,2,3,6
// 10: 1,2,5,10
// 15: 1,3,5,15
// 21: 1,3,7,21
// 28: 1,2,4,7,14,28
// We can see that 28 is the first triangle number to have over five divisors.
// What is the value of the first triangle number to have over five hundred divisors?
//first attempt 29 minutes, 40 seconds
//second attempt: 13 minutes, 32 seconds
//third attempt:
#define MAX_SAVED 100000
int countDivisors(long long);
int main() {
int i = 1;
int j;
long long triNumber;
int saved[MAX_SAVED] = {0};
while(1) {
if(i % 500 == 0) {
printf("On iteration %d: \n", i);
}
//find the current tri number
triNumber = ((i + 1) * i) / 2;
printf("[[[[[[[[[[[[[[[[[[[[[[ %lld ]]]]]]]]]]]]]]]]]]]\n", triNumber);
if(i == 100) break;
i++;
if(triNumber % 2 == 1) continue;
int divisors = 0;
int k = 0;
for(j = 2; j < triNumber && j < MAX_SAVED; j++) {
if(triNumber % j == 0 && saved[j] != 0) {
printf("Using %d with %d divisorsn;\n ", j, saved[j]);
divisors = saved[j];
k = j;
}
}
printf("Starting iterations at %d\n", 1 + k);
if(j > 0) {
for(j = 1 + k; j * 2 <= triNumber; j++) {
if(triNumber % j == 0) {
divisors++;
printf("Adding divisor %d; now at %d divisors\n", j, divisors);
}
}
}
printf("Divisors Before: %d\n", divisors);
divisors++;
printf("Divisors After: %d\n", divisors);
if(triNumber < MAX_SAVED) {
printf("Saving with %d divisors\n", divisors);
saved[(int)triNumber] = divisors;
}
// if(divisors > 200) {
printf("(%d divisors)\n", divisors);
// }
if(divisors > 500) break;
if(i < 0) break;
if(i == 9) break;
}
printf("\n%lld", triNumber);
return 1;
}

69
C/12-c.c Executable file
View file

@ -0,0 +1,69 @@
#include <stdio.h>
// The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:
// 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
// Let us list the factors of the first seven triangle numbers:
// 1: 1
// 3: 1,3
// 6: 1,2,3,6
// 10: 1,2,5,10
// 15: 1,3,5,15
// 21: 1,3,7,21
// 28: 1,2,4,7,14,28
// We can see that 28 is the first triangle number to have over five divisors.
// What is the value of the first triangle number to have over five hundred divisors?
//first attempt 29 minutes, 40 seconds
//second attempt: 13 minutes, 32 seconds
int countDivisors(long long);
int main() {
int i = 1;
int j;
long long triNumber;
while(1) {
if(i % 500 == 0) {
printf("On iteration %d: \n", i);
}
//find the current tri number
triNumber = ((i + 1) * i) / 2;
i++;
if(triNumber % 2 == 1) continue;
int divisors = countDivisors(triNumber);
if(divisors > 200) {
printf("%lld (%d divisors)\n", triNumber, divisors);
}
if(divisors > 500) break;
if(i < 0) break;
}
printf("\n%lld", triNumber);
return 1;
}
int countDivisors(long long number) {
int i;
int divisors = 0;
for(i = 1; i * i <= number; i++) {
if(number % i == 0) {
divisors += 2;
}
}
if(i * i == number) {
divisors--;
}
return divisors;
}

134
C/13-a.c Executable file
View file

@ -0,0 +1,134 @@
#include <stdio.h>
void addBig(int currentPlace, int previousSum, char grid[][50]);
int main() {
char grid[100][50] = {
{"37107287533902102798797998220837590246510135740250"},
{"46376937677490009712648124896970078050417018260538"},
{"74324986199524741059474233309513058123726617309629"},
{"91942213363574161572522430563301811072406154908250"},
{"23067588207539346171171980310421047513778063246676"},
{"89261670696623633820136378418383684178734361726757"},
{"28112879812849979408065481931592621691275889832738"},
{"44274228917432520321923589422876796487670272189318"},
{"47451445736001306439091167216856844588711603153276"},
{"70386486105843025439939619828917593665686757934951"},
{"62176457141856560629502157223196586755079324193331"},
{"64906352462741904929101432445813822663347944758178"},
{"92575867718337217661963751590579239728245598838407"},
{"58203565325359399008402633568948830189458628227828"},
{"80181199384826282014278194139940567587151170094390"},
{"35398664372827112653829987240784473053190104293586"},
{"86515506006295864861532075273371959191420517255829"},
{"71693888707715466499115593487603532921714970056938"},
{"54370070576826684624621495650076471787294438377604"},
{"53282654108756828443191190634694037855217779295145"},
{"36123272525000296071075082563815656710885258350721"},
{"45876576172410976447339110607218265236877223636045"},
{"17423706905851860660448207621209813287860733969412"},
{"81142660418086830619328460811191061556940512689692"},
{"51934325451728388641918047049293215058642563049483"},
{"62467221648435076201727918039944693004732956340691"},
{"15732444386908125794514089057706229429197107928209"},
{"55037687525678773091862540744969844508330393682126"},
{"18336384825330154686196124348767681297534375946515"},
{"80386287592878490201521685554828717201219257766954"},
{"78182833757993103614740356856449095527097864797581"},
{"16726320100436897842553539920931837441497806860984"},
{"48403098129077791799088218795327364475675590848030"},
{"87086987551392711854517078544161852424320693150332"},
{"59959406895756536782107074926966537676326235447210"},
{"69793950679652694742597709739166693763042633987085"},
{"41052684708299085211399427365734116182760315001271"},
{"65378607361501080857009149939512557028198746004375"},
{"35829035317434717326932123578154982629742552737307"},
{"94953759765105305946966067683156574377167401875275"},
{"88902802571733229619176668713819931811048770190271"},
{"25267680276078003013678680992525463401061632866526"},
{"36270218540497705585629946580636237993140746255962"},
{"24074486908231174977792365466257246923322810917141"},
{"91430288197103288597806669760892938638285025333403"},
{"34413065578016127815921815005561868836468420090470"},
{"23053081172816430487623791969842487255036638784583"},
{"11487696932154902810424020138335124462181441773470"},
{"63783299490636259666498587618221225225512486764533"},
{"67720186971698544312419572409913959008952310058822"},
{"95548255300263520781532296796249481641953868218774"},
{"76085327132285723110424803456124867697064507995236"},
{"37774242535411291684276865538926205024910326572967"},
{"23701913275725675285653248258265463092207058596522"},
{"29798860272258331913126375147341994889534765745501"},
{"18495701454879288984856827726077713721403798879715"},
{"38298203783031473527721580348144513491373226651381"},
{"34829543829199918180278916522431027392251122869539"},
{"40957953066405232632538044100059654939159879593635"},
{"29746152185502371307642255121183693803580388584903"},
{"41698116222072977186158236678424689157993532961922"},
{"62467957194401269043877107275048102390895523597457"},
{"23189706772547915061505504953922979530901129967519"},
{"86188088225875314529584099251203829009407770775672"},
{"11306739708304724483816533873502340845647058077308"},
{"82959174767140363198008187129011875491310547126581"},
{"97623331044818386269515456334926366572897563400500"},
{"42846280183517070527831839425882145521227251250327"},
{"55121603546981200581762165212827652751691296897789"},
{"32238195734329339946437501907836945765883352399886"},
{"75506164965184775180738168837861091527357929701337"},
{"62177842752192623401942399639168044983993173312731"},
{"32924185707147349566916674687634660915035914677504"},
{"99518671430235219628894890102423325116913619626622"},
{"73267460800591547471830798392868535206946944540724"},
{"76841822524674417161514036427982273348055556214818"},
{"97142617910342598647204516893989422179826088076852"},
{"87783646182799346313767754307809363333018982642090"},
{"10848802521674670883215120185883543223812876952786"},
{"71329612474782464538636993009049310363619763878039"},
{"62184073572399794223406235393808339651327408011116"},
{"66627891981488087797941876876144230030984490851411"},
{"60661826293682836764744779239180335110989069790714"},
{"85786944089552990653640447425576083659976645795096"},
{"66024396409905389607120198219976047599490197230297"},
{"64913982680032973156037120041377903785566085089252"},
{"16730939319872750275468906903707539413042652315011"},
{"94809377245048795150954100921645863754710598436791"},
{"78639167021187492431995700641917969777599028300699"},
{"15368713711936614952811305876380278410754449733078"},
{"40789923115535562561142322423255033685442488917353"},
{"44889911501440648020369068063960672322193204149535"},
{"41503128880339536053299340368006977710650566631954"},
{"81234880673210146739058568557934581403627822703280"},
{"82616570773948327592232845941706525094512325230608"},
{"22918802058777319719839450180888072429661980811197"},
{"77158542502016545090413245809786882778948721859617"},
{"72107838435069186155435662884062257473692284509516"},
{"20849603980134001723930671666823555245252804609722"},
{"53503534226472524250874054075591789781264330331690"},
};
addBig(49, 0, grid);
return 1;
}
void addBig(int currentPlace, int previousSum, char grid[][50]) {
int i, currentSum = 0;
for(i = 0; i < 100; i++) {
currentSum += (int)(grid[i][currentPlace] - 48);
}
currentSum += previousSum;
char charCurrentSum[3];
sprintf(charCurrentSum, "%03d", currentSum);
int nextSum = (int)(charCurrentSum[0] - 48) * 10 + (int)(charCurrentSum[1] - 48);
if(currentPlace-- == 0) {
printf("%d", currentSum);
return;
}
addBig(currentPlace, nextSum, grid);
printf("%c", charCurrentSum[2]);
}

31
C/14-a.c Executable file
View file

@ -0,0 +1,31 @@
#include <stdio.h>
int main() {
int i, scorer = 0;
int longestScore = 0;
for(i = 1; i < 1000000; i++) {
if(i % 50000 == 0) printf("ON THE %d ITERATION\n", i);
long long number = i;
int score = 1;
while(number != 1) {
if(number % 2 == 0) {
number = number / 2;
} else {
number = 3 * number + 1;
}
score++;
}
if(score > longestScore) {
if(score > 350) printf("%d set a new high score of %d\n", i, score);
longestScore = score;
scorer = i;
}
}
printf("\n\n%d scored %d", scorer, longestScore);
return 1;
}

33
C/15-a.c Executable file
View file

@ -0,0 +1,33 @@
#include <stdio.h>
// Starting in the top left corner of a 22 grid, there are 6 routes (without backtracking) to the bottom right corner.
// How many routes are there through a 2020 grid?
#define GRID_SIZE 2
long long traverse(int x, int y);
int main() {
printf("%lld", traverse(0, 0));
return 1;
}
long long traverse(int x, int y) {
long long i = 0;
printf("(%d, %d)\n", x, y);
if(x < GRID_SIZE) {
i += traverse(x + 1, y);
}
if(y < GRID_SIZE) {
i += traverse(x, y + 1);
}
if(x == GRID_SIZE && y == GRID_SIZE) {
return 1;
}
return i;
}

43
C/15-b.c Executable file
View file

@ -0,0 +1,43 @@
#include <stdio.h>
// Starting in the top left corner of a 22 grid, there are 6 routes (without backtracking) to the bottom right corner.
// How many routes are there through a 2020 grid?
#define GRID_SIZE 20
long long traverse(int x, int y);
int isCorner(int x, int y);
int main() {
long long paths = 0;
paths = traverse(0, 0);
printf("%lld", paths);
return 1;
}
long long traverse(int x, int y) {
static long long grid[GRID_SIZE][GRID_SIZE] = {{0}};
long long paths = 0;
if(GRID_SIZE - x == 0 || GRID_SIZE - y == 0) {
grid[x][y] = 1;
return 1;
}
if(grid[x][y] == 0) {
if(x < GRID_SIZE) {
paths += traverse(x + 1, y);
}
if(y < GRID_SIZE) {
paths += traverse(x, y + 1);
}
grid[x][y] = paths;
grid[y][x] = paths;
}
return grid[x][y];
}

40
C/15-giudoku.c Executable file
View file

@ -0,0 +1,40 @@
#include <stdio.h>
#define LEN 21
void printMatrice(unsigned long long m[][LEN])
{
int i,j;
for (i = 0; i < LEN; ++i)
{
for (j = 0; j < LEN; ++j)
{
printf ("%11llu ", m[i][j]);
}
printf("\n");
}
}
int main(int argc, char **argv)
{
unsigned long long matrice[LEN][LEN] = {0};
int i, j;
for (i = 0; i < LEN; ++i)
{
matrice[i][0] = matrice[0][i] = 1;
}
matrice[0][0] = 0;
for (i = 1; i < LEN; ++i)
{
for (j = 1; j < LEN; ++j)
{
matrice[i][j] = matrice[i-1][j] + matrice[i][j-1];
}
}
printMatrice(matrice);
return 0;
}

41
C/16-a.c Executable file
View file

@ -0,0 +1,41 @@
#include <stdio.h>
// 215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26.
// What is the sum of the digits of the number 2^1000?
#define POWER 1000
#define MAXSIZE 400
void power(int base, int power, int* digits);
int main() {
int digits[MAXSIZE] = {0};
int i, sum = 0;
digits[0] = 1;
power(2, POWER, digits);
for(i = 0; i < MAXSIZE; i++) {
sum += digits[i];
}
printf("%d\n", sum);
return 1;
}
void power(int base, int power, int* digits) {
int i, j;
for(i = 1; i <= power; i++) {
int current = 1, carry = 0;
for(j = 0; j < MAXSIZE; j++) {
current = (digits[j] << 1) + carry;
digits[j] = current % 10;
carry = current / 10;
}
}
}

31
C/17-a.c Executable file
View file

@ -0,0 +1,31 @@
#include <stdio.h>
// If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total.
// If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?
// NOTE: Do not count spaces or hyphens. For example, 342 (three hundred and forty-two) contains 23 letters and 115 (one hundred and fifteen) contains 20 letters. The use of "and" when writing out numbers is in compliance with British usage.
int main(void) {
int ones[] = {0, 3, 3, 5, 4, 4, 3, 5, 5, 4};
int teens[] = {3, 6, 6, 8, 8, 7, 7, 9, 8, 8};
int tens[] = {0, 0, 6, 6, 5, 5, 5, 7, 6, 6};
int i, onesSum = 0, teensSum= 0, tensSum= 0, hundredsSum = 0;
for(i = 0; i < 10; i++)
onesSum += ones[i];
for(i = 0; i < 10; i++)
teensSum += teens[i];
for(i = 0; i < 10; i++)
tensSum += tens[i];
int length = 0;
// ( ones teens tens ) ten times (XX hundred) ("hundred") ("and") ("thousand")
length = ((onesSum * 9 + teensSum + tensSum * 10) * 10) + (onesSum * 100) + (7*100*9) + (3*99*9) + 11;
printf("%d\n", length);
return 1;
}

77
C/18-a.c Executable file
View file

@ -0,0 +1,77 @@
#include <stdio.h>
// By starting at the top of the triangle below and moving to adjacent numbers on the row below, the maximum total from top to bottom is 23.
// 3
// 7 4
// 2 4 6
// 8 5 9 3
// That is, 3 + 7 + 4 + 9 = 23.
// Find the maximum total from top to bottom of the triangle below:
// 75 0 0
// 95 64 2 2
// 17 47 82 5 3
// 18 35 87 10 9 4
// 20 04 82 47 65 14 5
// 19 01 23 75 03 34 20 6
// 88 02 77 73 07 63 67 27 7
// 99 65 04 28 06 16 70 92
// 41 41 26 56 83 40 80 70 33
// 41 48 72 33 47 32 37 16 94 29
// 53 71 44 65 25 43 91 52 97 51 14
// 70 11 33 28 77 73 17 78 39 68 17 57
// 91 71 52 38 17 14 91 43 58 50 27 29 48
// 63 66 04 68 89 53 67 30 73 16 69 87 40 31
// 04 62 98 27 23 09 70 98 73 93 38 53 60 04 23
// NOTE: As there are only 16384 routes, it is possible to solve this problem by trying every route. However, Problem 67, is the same challenge with a triangle containing one-hundred rows; it cannot be solved by brute force, and requires a clever method! ;o)
#define SIZE 15
int traverseTriangle(int x, int y, int size);
int triangleSize(int triangle[]);
int main(void) {
// int triangle[4][4] = {
// {3, 0, 0, 0},
// {7, 4, 0, 0},
// {2, 4, 7, 0},
// {8, 5, 9, 3}
// };
int triangle[15][15] = {
{75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{95, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{17, 47, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{18, 35, 87, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{20, 4, 82, 47, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{19, 1, 23, 75, 3, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
{88, 2, 77, 73, 7, 63, 67, 0, 0, 0, 0, 0, 0, 0, 0, },
{99, 65, 4, 28, 6, 16, 70, 92, 0, 0, 0, 0, 0, 0, 0, },
{41, 41, 26, 56, 83, 40, 80, 70, 33, 0, 0, 0, 0, 0, 0, },
{41, 48, 72, 33, 47, 32, 37, 17, 94, 29, 0, 0, 0, 0, 0, },
{53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14, 0, 0, 0, 0, },
{70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57, 0, 0, 0, },
{91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48, 0, 0, },
{63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31, 0, },
{ 4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23, },
};
int i, j;
// size = 10; how to find last row
for(i = SIZE - 1; i >= 0; i--) {
for(j = 0; j <= SIZE - 1; j++) {
if(triangle[i][j] + triangle[i - 1][j] > triangle[i][j + 1] + triangle [i - 1][j]) {
triangle[i - 1][j] = triangle[i - 1][j] + triangle[i][j];
} else {
triangle[i - 1][j] = triangle[i - 1][j] + triangle[i][j + 1];
}
}
}
printf("%d", triangle[0][0]);
return 1;
}

54
C/19-a.c Executable file
View file

@ -0,0 +1,54 @@
#include <stdio.h>
// You are given the following information, but you may prefer to do some research for yourself.
// 1 Jan 1900 was a Monday.
// Thirty days has September,
// April, June and November.
// All the rest have thirty-one,
// Saving February alone,
// Which has twenty-eight, rain or shine.
// And on leap years, twenty-nine.
// A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400.
// How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?
int main(void) {
int year = 1900, month = 1, day = 1, firstSunday = 0;
for(; year <= 2000; year++) {
printf("%d: ", year);
for(month = 1; month <= 12; month++) {
int daysInMonth;
if(month == 4 || month == 6 || month == 9 || month == 11) {
daysInMonth = 30;
} else if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
daysInMonth = 31;
} else if(year % 100 == 0) {
if(year % 400 == 0) {
daysInMonth = 29;
} else {
daysInMonth = 28;
}
} else if(year % 4 == 0) {
daysInMonth = 29;
} else {
daysInMonth = 28;
}
if(day % 7 == 0) {
printf("X");
if(year != 1900)
firstSunday++;
} else {
printf("O");
}
day += daysInMonth;
}
printf("\t%d\n", firstSunday);
}
printf("%d\n", firstSunday);
return 1;
}

25
C/19-b.c Executable file
View file

@ -0,0 +1,25 @@
#include <stdio.h>
int main(void) {
int months[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int year, month, day = 1, firstSunday = 0;
for(year = 1900; year <= 2000; year++) {
for(month = 0; month < 12; month++) {
int daysInMonth = months[month];
if(month == 1 && year % 100 == 0) {
if(year % 400 == 0)
daysInMonth++;
} else if(month == 1 && year % 4 == 0)
daysInMonth++;
if(day % 7 == 0 && year != 1900)
firstSunday++;
day += daysInMonth;
}
}
printf("%d", firstSunday);
}

25
C/2-a.c Executable file
View file

@ -0,0 +1,25 @@
#include <stdio.h>
// Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
// 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
// By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
void main() {
int i = 1;
int j,sum = 0;
while(i < 4000000) {
printf("%d, ", i);
if(i % 2 == 0) {
sum += i;
}
int temp = i;
i = i + j;
j = temp;
}
printf("\n\nSum: %d", sum);
}

34
C/20-a.c Executable file
View file

@ -0,0 +1,34 @@
#include <stdio.h>
// n! means n (n 1) ... 3 2 1
// For example, 10! = 10 9 ... 3 2 1 = 3628800,
// and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.
// Find the sum of the digits in the number 100!
#define NUMBER 100
#define MAXSIZE 500
int main(void) {
int factorial [MAXSIZE] = {0};
int i, j, sum = 0;
factorial[0] = 1;
for(i = NUMBER; i > 0; i--) {
int current = 1, carry = 0;
for(j = 0; j < MAXSIZE; j++) {
current = factorial[j] * i + carry;
factorial[j] = current % 10;
carry = current / 10;
}
}
for(i = 0; i < MAXSIZE; i++)
sum += factorial[i];
printf("%d", sum);
return 1;
}

43
C/21-a.c Executable file
View file

@ -0,0 +1,43 @@
#include <stdio.h>
// Let d(n) be defined as the sum of proper divisors of n (numbers less than n which divide evenly into n).
// If d(a) = b and d(b) = a, where a != b, then a and b are an amicable pair and each of a and b are called amicable numbers.
// For example, the proper divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110; therefore d(220) = 284. The proper divisors of 284 are 1, 2, 4, 71 and 142; so d(284) = 220.
// Evaluate the sum of all the amicable numbers under 10000.
#define UPPER 10000
int sumDivisors(int number);
int main(void) {
int divisors[UPPER] = {0};
int i, amicableSum = 0;
for(i = 0; i < UPPER; i++)
divisors[i] = sumDivisors(i);
for(i = 0; i < UPPER; i++) {
if(divisors[i] < UPPER) {
if(divisors[divisors[i]] == i && divisors[i] != i) {
printf("%d and %d are amicable\n", i, divisors[i]);
amicableSum += i;
}
}
}
printf("%d", amicableSum);
return 1;
}
int sumDivisors(int number) {
int i, sum = 0;
for(i = 1; i * 2 <= number; i++)
if(number % i == 0)
sum += i;
return sum;
}

62
C/22-a.c Executable file
View file

@ -0,0 +1,62 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Using names.txt (right click and 'Save Link/Target As...'), a 46K text file containing over five-thousand first names, begin by sorting it into alphabetical order. Then working out the alphabetical value for each name, multiply this value by its alphabetical position in the list to obtain a name score.
// For example, when the list is sorted into alphabetical order, COLIN, which is worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. So, COLIN would obtain a score of 938 * 53 = 49714.
// What is the total of all the name scores in the file?
int nameScore(char name[50]);
int main(void) {
char c;
char names[5163][50];
int i, name = 0, character = 0, inQuotes = 0;
long long totalScore = 0;
while((c = getchar()) != EOF) {
if(c == '"') {
if(inQuotes == 0) {
inQuotes = 1;
} else {
inQuotes = 0;
names[name][character] = '\0';
name++;
character = 0;
}
} else if(c != ',') {
names[name][character] = c;
character++;
}
}
qsort(names, 5163, 50, (int(*)(const void*, const void*))strcmp);
for(i = 0; i < name; i++) {
int scoredName = nameScore(names[i]);
int currentScore = (i + 1) * scoredName;
totalScore += currentScore;
}
printf("%lld", totalScore);
return 1;
}
int nameScore(char name[50]) {
char alphabet[27] = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i, j, nameScore = 0;
for(i = 0; name[i] != '\0'; i++) {
for(j = 1; j < 27; j++) {
if(name[i] == alphabet[j]) {
nameScore += j;
break;
}
}
}
return nameScore;
}

66
C/22-b.c Executable file
View file

@ -0,0 +1,66 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Using names.txt (right click and 'Save Link/Target As...'), a 46K text file containing over five-thousand first names, begin by sorting it into alphabetical order. Then working out the alphabetical value for each name, multiply this value by its alphabetical position in the list to obtain a name score.
// For example, when the list is sorted into alphabetical order, COLIN, which is worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. So, COLIN would obtain a score of 938 * 53 = 49714.
// What is the total of all the name scores in the file?
int nameScore(char name[50]);
int main(void) {
char c;
char (*names)[50] = malloc(10 * sizeof(char[50]));
int i, name = 0, character = 0, inQuotes = 0, capacity = 10;
long long totalScore = 0;
while((c = getchar()) != EOF) {
if(name == capacity) {
capacity *= 2;
names = realloc(names, capacity * sizeof(char[50]));
}
if(c == '"') {
if(inQuotes == 0) {
inQuotes = 1;
} else {
inQuotes = 0;
names[name][character] = '\0';
name++;
character = 0;
}
} else if(c != ',') {
names[name][character] = c;
character++;
}
}
qsort(names, name, sizeof(char[50]), (int(*)(const void*, const void*))strcmp);
for(i = 0; i < name; i++) {
int scoredName = nameScore(names[i]);
int currentScore = (i + 1) * scoredName;
totalScore += currentScore;
}
printf("%lld", totalScore);
return 1;
}
int nameScore(char name[50]) {
char alphabet[] = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i, j, nameScore = 0;
for(i = 0; name[i] != '\0'; i++) {
for(j = 1; alphabet[j] != '\0'; j++) {
if(name[i] == alphabet[j]) {
nameScore += j;
break;
}
}
}
return nameScore;
}

1
C/22-small.txt Executable file
View file

@ -0,0 +1 @@
"MARY","PATRICIA"

1
C/22.txt Executable file

File diff suppressed because one or more lines are too long

57
C/23-a.c Executable file
View file

@ -0,0 +1,57 @@
#include <stdio.h>
// A perfect number is a number for which the sum of its proper divisors is exactly equal to the number. For example, the sum of the proper divisors of 28 would be 1 + 2 + 4 + 7 + 14 = 28, which means that 28 is a perfect number.
// A number n is called deficient if the sum of its proper divisors is less than n and it is called abundant if this sum exceeds n.
// As 12 is the smallest abundant number, 1 + 2 + 3 + 4 + 6 = 16, the smallest number that can be written as the sum of two abundant numbers is 24. By mathematical analysis, it can be shown that all integers greater than 28123 can be written as the sum of two abundant numbers. However, this upper limit cannot be reduced any further by analysis even though it is known that the greatest number that cannot be expressed as the sum of two abundant numbers is less than this limit.
// Find the sum of all the positive integers which cannot be written as the sum of two abundant numbers.
#define DEFICITMAX 28123
int divisorSum(int number);
int main(void) {
int abundantSums[DEFICITMAX] = {1};
int abundantAdds[DEFICITMAX] = {0};
int i, j, abundantAddSum = 0;
for(i = 1; i <= DEFICITMAX; i++) {
abundantSums[i] = divisorSum(i);
if(abundantSums[i] <= i)
abundantSums[i] = 0;
}
for(i = 1; i <= DEFICITMAX; i++) {
if(abundantSums[i] > 0) {
for(j = 1; i + j <= DEFICITMAX; j++) {
if(abundantSums[j] > 0 && abundantAdds[i + j] != 1) {
abundantAdds[i + j] = 1;
}
}
}
}
for(i = 1; i <= DEFICITMAX; i++) {
if(abundantAdds[i] == 0) {
abundantAddSum += i;
}
}
printf("\n\n = %d", abundantAddSum);
return 1;
}
int divisorSum(int number) {
int i, sum = 0;
for(i = 1; i <= number / 2; i++)
if(number % i == 0) {
sum += i;
}
return sum;
}

48
C/23-b.c Executable file
View file

@ -0,0 +1,48 @@
#include <stdio.h>
#define DEFICITMAX 28123
int divisorSum(int number);
int main(void) {
int abundantNumbers[DEFICITMAX] = {0};
int sumOfAbundantNumbers[DEFICITMAX] = {0};
int i, j, sum = 0;
// generate list of abundant numbers 1-DEFICITMAX
for(i = 1; i <= DEFICITMAX; i++)
if(isAbundant(i) == 1)
abundantNumbers[i] = 1;
// generate list of all numbers that are the sum of abundant numbers
for(i = 1; i <= DEFICITMAX; i++) {
if(abundantNumbers[i] > 0) {
for(j = 1; i + j <= DEFICITMAX; j++) {
if(abundantNumbers[j] > 0 && sumOfAbundantNumbers[i + j] != 1) {
sumOfAbundantNumbers[i + j] = 1;
}
}
}
}
// sum up all positive integers that cannot be written as the sum
for(i = 1; i <= DEFICITMAX; i++) {
if(sumOfAbundantNumbers[i] == 0) {
sum += i;
}
}
printf("\n\n%d", sum);
return 1;
}
int isAbundant(int number) {
int i, sum = 0;
for(i = 1; i <= number / 2; i++)
if(number % i == 0)
sum += i;
return (sum > number) ? 1 : 0;
}

59
C/24-a.c Executable file
View file

@ -0,0 +1,59 @@
#include <stdio.h>
// A permutation is an ordered arrangement of objects. For example, 3124 is one possible permutation of the digits 1, 2, 3 and 4. If all of the permutations are listed numerically or alphabetically, we call it lexicographic order. The lexicographic permutations of 0, 1 and 2 are:
// 012 021 102 120 201 210
// What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?
#define MAXPERM 3
void swap(int i, int j, int numbers[]);
void permutate(int numbers[]);
int main(void) {
// int numbers[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int numbers[] = { 0, 1, 2 };
int i, permutations = 0;
i = sizeof(numbers) - 1;
while(permutations < MAXPERM) {
while(numbers[i - 1] >= numbers[i]) {
i--;
}
int j = sizeof(numbers);
while(numbers[j - 1] <= numbers[i - 1]) {
j = j - 1;
}
swap(i - 1, j - 1, numbers);
i++;
j = sizeof(numbers);
while(i < j) {
swap(i - 1, j - 1, numbers);
i++;
j--;
}
permutations++;
}
for(i = 0; i < MAXPERM; i++)
printf("%d, ", numbers[i]);
return 1;
}
void permutate(int numbers[]) {
}
void swap(int i, int j, int numbers[]) {
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}

57
C/24-b.c Executable file
View file

@ -0,0 +1,57 @@
#include <stdio.h>
#define GETPERM 1000000
void permutate(int set[], int setSize);
void swap(int a, int b, int numbers[]);
void printSet(int set[], int setSize);
int main(void) {
int numbers[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int setSize = sizeof(numbers) / sizeof(numbers[0]);
permutate(numbers, setSize);
printf("\nPermutation %d: ", GETPERM);
printSet(numbers, setSize);
return 1;
}
void permutate(int a[], int setSize) {
int permutations = 0;
int k, l;
while(permutations < GETPERM - 1) {
// Find the largest index k such that a[k] < a[k + 1]. If no such index exists, the permutation is the last permutation
for(k = setSize - 2; a[k] >= a[k + 1]; k--)
;
// Find the largest index l such that a[k] < a[l]. Since k + 1 is such an index, l is well defined and satisfies k < l.
for(l = setSize - 1; a[k] >= a[l]; l--)
;
// Swap a[k] with a[l].
swap(k, l, a);
// Reverse the sequence from a[k + 1] up to and including the final element a[n].
for(k++, l = setSize - 1; k < l; k++, l--)
swap(k, l, a);
permutations++;
}
}
void swap(int a, int b, int set[]) {
int temp = set[b];
set[b] = set[a];
set[a] = temp;
}
void printSet(int set[], int setSize) {
int i;
for(i = 0; i < setSize; i++)
printf("%d, ", set[i]);
}

45
C/24-mathblog.c Executable file
View file

@ -0,0 +1,45 @@
#include <stdio.h>
int main() {
int[] perm = { 0, 1, 2 };
int count = 1;
int numPerm = 3a;
while (count < numPerm) {
int N = perm.Length;
int i = N-1;
while (perm[i - 1] >= perm[i]) {
i = i - 1;
}
int j = N;
while (perm[j - 1] <= perm[i - 1]) {
j = j - 1;
}
// swap values at position i-1 and j-1
swap(i - 1, j - 1);
i++;
j = N;
while (i < j) {
swap(i - 1, j - 1);
i++;
j--;
}
count++;
}
string permNum = "";
for (int k = 0; k < perm.Length; k++) {
permNum = permNum + perm[k];
}
}
private void swap(int i, int j) {
int k = perm[i];
perm[i] = perm[j];
perm[j] = k;
}

36
C/25-a.c Executable file
View file

@ -0,0 +1,36 @@
#include <stdio.h>
#include <math.h>
// The Fibonacci sequence is defined by the recurrence relation:
// F(n) = F(n-1) + F(n-2), where F(1) = 1 and F(2) = 1.
// Hence the first 12 terms will be:
// F(1) = 1
// F(2) = 1
// F(3) = 2
// F(4) = 3
// F(5) = 5
// F(6) = 8
// F(7) = 13
// F(8) = 21
// F(9) = 34
// F(10) = 55
// F(11) = 89
// F(12) = 144
// The 12th term, F(12), is the first term to contain three digits.
// What is the first term in the Fibonacci sequence to contain 1000 digits?
#define DIGITS 1000
int main(void) {
long double goldenRatio = (1 + sqrt(5)) / 2;
// int number = (int)ceil((DIGITS - 1 * log10(5)) / log10(goldenRatio));
int number = (int)ceil((DIGITS - 1 + log10(5) / 2) / log10(goldenRatio));
printf("%d", number);
return 1;
}

15
C/25-test.c Executable file
View file

@ -0,0 +1,15 @@
#include <stdio.h>
#include <math.h>
#define DIGITS 100000
int main(void) {
long double goldenRatio = (1 + sqrt(5)) / 2;
int number1 = (int)ceil((DIGITS - 1 * log10(5)) / log10(goldenRatio));
int number2 = (int)ceil((DIGITS - 1 + log10(5) / 2) / log10(goldenRatio));
printf("%d = %d\n", number1, number2);
return 1;
}

50
C/26-a.c Executable file
View file

@ -0,0 +1,50 @@
#include <stdio.h>
// A unit fraction contains 1 in the numerator. The decimal representation of the unit fractions with denominators 2 to 10 are given:
// 1/2 = 0.5
// 1/3 = 0.(3)
// 1/4 = 0.25
// 1/5 = 0.2
// 1/6 = 0.1(6)
// 1/7 = 0.(142857)
// 1/8 = 0.125
// 1/9 = 0.(1)
// 1/10 = 0.1
// Where 0.1(6) means 0.166666..., and has a 1-digit recurring cycle. It can be seen that 1/7 has a 6-digit recurring cycle.
// Find the value of d 1000 for which 1/d contains the longest recurring cycle in its decimal fraction part.
#define UPPER 1000
char* convertToDigits(double number);
int main(void) {
int i, j = -1, primes[UPPER] = {0};
for(i = 1; i < UPPER; i++)
if(isPrime(i))
primes[j++] = i;
for(i = 0; i < j; i++) {
printf("1/%d: %.15f\n", primes[i], 1.0 / primes[i]);
}
return 1;
}
char* convertToDigits(double number) {
}
int isPrime(int number) {
int i;
for(i = 2; i * i < number; i += 2) {
if(number % i == 0 && i != number) {
return 0;
}
}
return 1;
}

37
C/3-a.c Executable file
View file

@ -0,0 +1,37 @@
#include <stdio.h>
#include <math.h>
// The prime factors of 13195 are 5, 7, 13 and 29.
// What is the largest prime factor of the number 600,851,475,143 ?
void main() {
long long number = 600851475143;
int i = (int) (sqrt(number) + 0.5);
while(i > 2) {
double quotient = (double)number / (double)i;
if(quotient / 1.0 == (int)quotient) {
int bool = isPrime(i);
if(bool == 1) {
printf("\n\nLargest Prime Factor: %d", i);
break;
}
}
//decrement i; preferably only going through odds?
i = i - 1;
}
}
int isPrime(int number) {
int i;
for(i = 2; i < number; i++) {
if(number % i == 0 && i != number) {
return 0;
}
}
return 1;
}

37
C/3-b.c Executable file
View file

@ -0,0 +1,37 @@
#include <stdio.h>
#include <math.h>
// The prime factors of 13195 are 5, 7, 13 and 29.
// What is the largest prime factor of the number 600,851,475,143 ?
void main() {
long long number = 600851475143;
int i = (int) (sqrt(number) + 0.5);
while(i > 2) {
double quotient = (double)number / (double)i;
if(quotient / 1.0 == (int)quotient) {
int bool = isPrime(i);
if(bool == 1) {
printf("\n\nLargest Prime Factor: %d", i);
break;
}
}
//decrement i; preferably only going through odds?
i = i - 1;
}
}
int isPrime(int number) {
int i;
for(i = 2; i < number; i++) {
if(number % i == 0 && i != number) {
return 0;
}
}
return 1;
}

14
C/3-bitrake.c Executable file
View file

@ -0,0 +1,14 @@
#include <stdio.h>
void main() {
long long number = 600851475143;
int divisor = 2;
while (number > 1) {
if (0 == (number % divisor)) {
number /= divisor;
divisor--;
}
divisor++;
}
printf("%d", divisor);
}

34
C/4-a.c Executable file
View file

@ -0,0 +1,34 @@
#include <stdio.h>
#include <math.h>
// A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 99.
// Find the largest palindrome made from the product of two 3-digit numbers.
void main() {
int i, j, k, palindrome;
for(i = 100; i < 1000; i++) {
for(j = 100; j < 1000; j++) {
int product = i * j;
//test if product is palindrome and store
int reverse = 0, number = product;
while(number > 0) {
int last = number % 10; // find the last digit
reverse = reverse * 10 + last; // push over the reverse and tack on the last digit
number = number / 10; // chop off the last digit
}
if(product == reverse) {
if(product > palindrome) {
palindrome = product;
}
}
}
}
printf("%d", palindrome);
}

26
C/5-a.c Executable file
View file

@ -0,0 +1,26 @@
#include <stdio.h>
// 2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.
// What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?
void main() {
int i = 20; //no smaller than this
int j;
while(1) {
for(j = 19; j > 0; j--) {
if(i % j != 0) {
break;
}
}
if(j == 0) {
break;
}
i += 20;
}
printf("%d", i);
}

31
C/6-a.c Executable file
View file

@ -0,0 +1,31 @@
#include <stdio.h>
// The sum of the squares of the first ten natural numbers is,
// 1^2 + 2^2 + ... + 10^2 = 385
// The square of the sum of the first ten natural numbers is,
// (1 + 2 + ... + 10)^2 = 55^2 = 3025
// Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is 3025 385 = 2640.
// Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.
void main() {
int sumOfSquares = 0;
int i = 0;
for(i = 1; i <= 100; i++) {
sumOfSquares += i * i;
}
int squareOfSums = 0;
for(i = 1; i <= 100; i++) {
squareOfSums += i;
}
squareOfSums *= squareOfSums;
int difference = squareOfSums - sumOfSquares;
printf("%d", difference);
}

36
C/7-a.c Executable file
View file

@ -0,0 +1,36 @@
#include <stdio.h>
// By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.
// What is the 10 001st prime number?
void main() {
int primes = 0;
int i = 1;
while(1) {
if(isPrime(i) == 1) {
primes++;
}
if(primes == 10001) {
break;
}
i++;
}
printf("%d", i);
}
int isPrime(int number) {
int i;
if(number % 2 == 0) return 0;
for(i = number; i > 2; i -= 2) {
if(number % i == 0 && i != number) return 0;
}
return 1;
}

83
C/8-a.c Executable file
View file

@ -0,0 +1,83 @@
#include <stdio.h>
// Find the greatest product of five consecutive digits in the 1000-digit number.
// 73167176531330624919225119674426574742355349194934
// 96983520312774506326239578318016984801869478851843
// 85861560789112949495459501737958331952853208805511
// 12540698747158523863050715693290963295227443043557
// 66896648950445244523161731856403098711121722383113
// 62229893423380308135336276614282806444486645238749
// 30358907296290491560440772390713810515859307960866
// 70172427121883998797908792274921901699720888093776
// 65727333001053367881220235421809751254540594752243
// 52584907711670556013604839586446706324415722155397
// 53697817977846174064955149290862569321978468622482
// 83972241375657056057490261407972968652414535100474
// 82166370484403199890008895243450658541227588666881
// 16427171479924442928230863465674813919123162824586
// 17866458359124566529476545682848912883142607690042
// 24219022671055626321111109370544217506941658960408
// 07198403850962455444362981230987879927244284909188
// 84580156166097919133875499200524063689912560717606
// 05886116467109405077541002256983155200055935729725
// 71636269561882670428252483600823257530420752963450
void main() {
int i,k;
int greatestProduct = 0;
for(i = 0; i < 1000; i++) {
if(i >= 4) {
//get previous 5 locations
int values[5] = {
getValue(i),
getValue(i - 1),
getValue(i - 2),
getValue(i - 3),
getValue(i - 4),
};
int currentProduct = 1;
for(k = 0; k < 5; k++) {
currentProduct *= values[k];
}
if(currentProduct > greatestProduct) {
greatestProduct = currentProduct;
}
}
}
printf("%d", greatestProduct);
}
int getValue(int number) {
int oneThousand[20][50] = {
{7,3,1,6,7,1,7,6,5,3,1,3,3,0,6,2,4,9,1,9,2,2,5,1,1,9,6,7,4,4,2,6,5,7,4,7,4,2,3,5,5,3,4,9,1,9,4,9,3,4},
{9,6,9,8,3,5,2,0,3,1,2,7,7,4,5,0,6,3,2,6,2,3,9,5,7,8,3,1,8,0,1,6,9,8,4,8,0,1,8,6,9,4,7,8,8,5,1,8,4,3},
{8,5,8,6,1,5,6,0,7,8,9,1,1,2,9,4,9,4,9,5,4,5,9,5,0,1,7,3,7,9,5,8,3,3,1,9,5,2,8,5,3,2,0,8,8,0,5,5,1,1},
{1,2,5,4,0,6,9,8,7,4,7,1,5,8,5,2,3,8,6,3,0,5,0,7,1,5,6,9,3,2,9,0,9,6,3,2,9,5,2,2,7,4,4,3,0,4,3,5,5,7},
{6,6,8,9,6,6,4,8,9,5,0,4,4,5,2,4,4,5,2,3,1,6,1,7,3,1,8,5,6,4,0,3,0,9,8,7,1,1,1,2,1,7,2,2,3,8,3,1,1,3},
{6,2,2,2,9,8,9,3,4,2,3,3,8,0,3,0,8,1,3,5,3,3,6,2,7,6,6,1,4,2,8,2,8,0,6,4,4,4,4,8,6,6,4,5,2,3,8,7,4,9},
{3,0,3,5,8,9,0,7,2,9,6,2,9,0,4,9,1,5,6,0,4,4,0,7,7,2,3,9,0,7,1,3,8,1,0,5,1,5,8,5,9,3,0,7,9,6,0,8,6,6},
{7,0,1,7,2,4,2,7,1,2,1,8,8,3,9,9,8,7,9,7,9,0,8,7,9,2,2,7,4,9,2,1,9,0,1,6,9,9,7,2,0,8,8,8,0,9,3,7,7,6},
{6,5,7,2,7,3,3,3,0,0,1,0,5,3,3,6,7,8,8,1,2,2,0,2,3,5,4,2,1,8,0,9,7,5,1,2,5,4,5,4,0,5,9,4,7,5,2,2,4,3},
{5,2,5,8,4,9,0,7,7,1,1,6,7,0,5,5,6,0,1,3,6,0,4,8,3,9,5,8,6,4,4,6,7,0,6,3,2,4,4,1,5,7,2,2,1,5,5,3,9,7},
{5,3,6,9,7,8,1,7,9,7,7,8,4,6,1,7,4,0,6,4,9,5,5,1,4,9,2,9,0,8,6,2,5,6,9,3,2,1,9,7,8,4,6,8,6,2,2,4,8,2},
{8,3,9,7,2,2,4,1,3,7,5,6,5,7,0,5,6,0,5,7,4,9,0,2,6,1,4,0,7,9,7,2,9,6,8,6,5,2,4,1,4,5,3,5,1,0,0,4,7,4},
{8,2,1,6,6,3,7,0,4,8,4,4,0,3,1,9,9,8,9,0,0,0,8,8,9,5,2,4,3,4,5,0,6,5,8,5,4,1,2,2,7,5,8,8,6,6,6,8,8,1},
{1,6,4,2,7,1,7,1,4,7,9,9,2,4,4,4,2,9,2,8,2,3,0,8,6,3,4,6,5,6,7,4,8,1,3,9,1,9,1,2,3,1,6,2,8,2,4,5,8,6},
{1,7,8,6,6,4,5,8,3,5,9,1,2,4,5,6,6,5,2,9,4,7,6,5,4,5,6,8,2,8,4,8,9,1,2,8,8,3,1,4,2,6,0,7,6,9,0,0,4,2},
{2,4,2,1,9,0,2,2,6,7,1,0,5,5,6,2,6,3,2,1,1,1,1,1,0,9,3,7,0,5,4,4,2,1,7,5,0,6,9,4,1,6,5,8,9,6,0,4,0,8},
{0,7,1,9,8,4,0,3,8,5,0,9,6,2,4,5,5,4,4,4,3,6,2,9,8,1,2,3,0,9,8,7,8,7,9,9,2,7,2,4,4,2,8,4,9,0,9,1,8,8},
{8,4,5,8,0,1,5,6,1,6,6,0,9,7,9,1,9,1,3,3,8,7,5,4,9,9,2,0,0,5,2,4,0,6,3,6,8,9,9,1,2,5,6,0,7,1,7,6,0,6},
{0,5,8,8,6,1,1,6,4,6,7,1,0,9,4,0,5,0,7,7,5,4,1,0,0,2,2,5,6,9,8,3,1,5,5,2,0,0,0,5,5,9,3,5,7,2,9,7,2,5},
{7,1,6,3,6,2,6,9,5,6,1,8,8,2,6,7,0,4,2,8,2,5,2,4,8,3,6,0,0,8,2,3,2,5,7,5,3,0,4,2,0,7,5,2,9,6,3,4,5,0}
};
int row = (int)(number / 50 + 0.5);
int column = number % 50;
return oneThousand[row][column];
}

9
C/8-b.c Executable file
View file

@ -0,0 +1,9 @@
#include <stdio.h>
//testing rounding
void main() {
int row = (int)(50 / 50 + 0.5);
printf("%d", row);
}

23
C/8-c.c Executable file
View file

@ -0,0 +1,23 @@
#include <stdio.h>
void main() {
char oneThouseand[] = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";
int i, k;
int greatestProduct = 0;
for(i = 0; i < 1000; i++) {
if(i >= 4) {
int currentProduct = 1;
for(k = i - 4; k <= i; k++) {
currentProduct *= (oneThouseand[k] - 48);
}
if(currentProduct > greatestProduct) {
greatestProduct = currentProduct;
}
}
}
printf("%d", greatestProduct);
}

33
C/9-a.c Executable file
View file

@ -0,0 +1,33 @@
#include <stdio.h>
// A Pythagorean triplet is a set of three natural numbers, a b c, for which,
// a2^ + b^2 = c^2
// For example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2.
// There exists exactly one Pythagorean triplet for which a + b + c = 1000.
// Find the product abc.
int main() {
int n, m;
int a, b, c;
for(n = 1; n < 20; n++) {
for(m = n + 1; m <= 20; m++) {
a = m*m - n*n;
b = 2*n*m;
c = n*n + m*m;
printf("\n%d + %d + %d = %d", a, b, c, a + b + c);
if(a + b + c == 1000) goto found;
}
}
found:
printf("\n\n%d^2 + %d^2 = %d^2", a, b, c);
printf("\n\nProduct = %d", a * b * c);
return 1;
}

0
C/nohup.out Normal file
View file

10
PHP/16-b.php Executable file
View file

@ -0,0 +1,10 @@
<?php
$POWER = 1000;
$sum = 0;
foreach(str_split(sprintf('%0.0f', pow(2, $POWER))) as $number)
$sum += $number;
echo $sum;

11
PHP/20-b.php Executable file
View file

@ -0,0 +1,11 @@
<?php
$factorial = 1;
for($i = 100; $i > 0; $i--)
$factorial = bcmul($factorial, $i);
$sum = 0;
foreach(str_split($factorial) as $number)
$sum += $number;
echo $sum;

1
README Normal file
View file

@ -0,0 +1 @@
Solutions for Project Euler. Solutions are numbered after the corresponding problem number with one of two things: a number that signifies the current iteration of a solution or a name when the solution is someone else's.