Project Euler 1-10

#はじめに
C言語の勉強のため、コツコツ進めています。

#Problem 1
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.

```c:euler1.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
  int sum=0;
  int i;

  for(i=0;i<1000;i++)
  {
    if((i%3)*(i%5)==0) sum+=i;
  }

  printf("%d\n",sum);

  return 0;
}
```

#Problem 2
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.

```c:euler2.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
  long int sum=2;
  int a=1;
  int b=2;
  int c;

  while(1)
  {
    c=a+b;
    if(c>4000000)
    {
      printf("%ld\n",sum);
      break;
    }
    if(c%2==0) sum+=c;
    a=b;
    b=c;
  }

  return 0;
}
```

#Problem 3
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?

```c:euler3.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
  long int num=600851475143;
  int i=2;

  while(i<=num)
  {
    while(num%i==0) num/=i;
    if(num==1) printf("%d\n",i);
    i++;
  }

  return 0;
}
```

#Problem 4
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.

```c:euler4.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
  int num,tmp;
  int dig[6]={};
  int max=0;
  int i,j,k;

  for(i=100;i<1000;i++)
  {
    for(j=100;j<1000;j++)
    {
      num=i*j;
      tmp = num;
      for(k=0;k<6;k++)
      {
        dig[k] = tmp%10;
        tmp /= 10;
      }
      if((dig[5]==0&&dig[0]==dig[4]&&dig[1]==dig[3]) || (dig[0]==dig[5]&&dig[1]==dig[4]&&dig[2]==dig[3]))
      {
        if(num>max) max=num;
      }
    }
  }

  printf("%d\n",max);

  return 0;
}
```

#Problem 5
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?

```c:euler5.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

long int gcd(long int p, long int q)
{
  if(p%q == 0) return q;
  return gcd(q,p%q);
}

long int lcm(long int p, long int q)
{
  return p*q/gcd(p,q);
}

int main(void)
{
  long int tmp=1;
  int i;

  for(i=2;i<=20;i++)
  {
    tmp = lcm(tmp,i);
  }

  printf("%ld\n",tmp);

  return 0;
}
```

#Problem 6
The sum of the squares of the first ten natural numbers is,

```math
1^{2}+2^{2}+…+10^{2} = 385
```

The square of the sum of the first ten natural numbers is,

```math
(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.

```c:euler6.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
  long int sum1=0;
  long int sum2=0;
  int i;

  for(i=1;i<=100;i++)
  {
    sum1 += i*i;
    sum2 += i;
  }

  sum2 = sum2*sum2;

  printf("%ld\n",sum2-sum1);

  return 0;
}
```

#Problem 7
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?

```c:euler7.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
  int count=1;
  int i,j,k=0;

  for(i=3;i>2;i++)
  {
    for(j=2;j<sqrt(i)+1;j++)
    {
      if(i%j==0)
      {
        k=1;
        break;
      }
    }
    if(k==0) count++;
    if(count==10001)
    {
      printf("%d\n",i);
      break;
    }
    k=0;
  }

  return 0;
}
```

#Problem 8
The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × 8 × 9 = 5832.

```math
73167176531330624919225119674426574742355349194934 \\
96983520312774506326239578318016984801869478851843 \\
85861560789112949495459501737958331952853208805511 \\
12540698747158523863050715693290963295227443043557 \\
66896648950445244523161731856403098711121722383113 \\
62229893423380308135336276614282806444486645238749 \\
30358907296290491560440772390713810515859307960866 \\
70172427121883998797908792274921901699720888093776 \\
65727333001053367881220235421809751254540594752243 \\
52584907711670556013604839586446706324415722155397 \\
53697817977846174064955149290862569321978468622482 \\
83972241375657056057490261407972968652414535100474 \\
82166370484403199890008895243450658541227588666881 \\
16427171479924442928230863465674813919123162824586 \\
17866458359124566529476545682848912883142607690042 \\
24219022671055626321111109370544217506941658960408 \\
07198403850962455444362981230987879927244284909188 \\
84580156166097919133875499200524063689912560717606 \\
05886116467109405077541002256983155200055935729725 \\
71636269561882670428252483600823257530420752963450
```

Find the thirteen adjacent digits in the 1000-digit number that have the greatest product. What is the value of this product?

```c:euler8.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int ctoi(char c)
{
  switch(c)
  {
    case '0' : return 0;
    case '1' : return 1;
    case '2' : return 2;
    case '3' : return 3;
    case '4' : return 4;
    case '5' : return 5;
    case '6' : return 6;
    case '7' : return 7;
    case '8' : return 8;
    case '9' : return 9;
    default : return 0;
  }
}

int main(void)
{
  char str[1000] =
  "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";

  int num[1000];
  long int tmp=1;
  long int max=1;
  int i,j;

  for(i=0;i<1000;i++)
  {
    num[i] = ctoi(str[i]);
  }

  for(i=0;i<988;i++)
  {
    for(j=0;j<13;j++)
    {
      tmp *= num[i+j];
      if(tmp==0)
      {
        i+=j;
        break;
      }
    }
    if(max<tmp) max=tmp;
    tmp=1;
  }

  printf("%ld\n",max);

  return 0;
}
```

#Problem 9
A Pythagorean triplet is a set of three natural numbers, $a < b < c$, for which,

```math
a^{2} + 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=100$.
Find the product $abc$.

```c:euler9.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
  int a,b,c;

  for(a=1;a<333;a++)
  {
    for(b=a+1;b<1000-a-b;b++)
    {
      c=1000-a-b;
      if(a*a + b*b == c*c)
      {
        printf("%d\n",a*b*c);
        break;
      }
    }
  }

  return 0;
}
```

#Problem 10
The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
Find the sum of all the primes below two million.

```c:euler10.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
  long int sum=2;
  int i,j;
  int k=0;

  for(i=3;i<2000000;i++)
  {
    for(j=2;j<sqrt(i)+1;j++)
    {
      if(i%j==0)
      {
        k=1;
        break;
      }
    }
    if(k==0) sum+=i;
    k=0;
  }

  printf("%ld\n",sum);

  return 0;
}
```