Project Euler

2008/10/03

Project Euler Problem2

第2問

Link:Problem2 - PukiWiki

/*
  Probrem2

  フィボナッチ数列の項は前の2つの項の和である。
  最初の2項を 1, 2 とすれば、最初の10項は以下の通りである。
   1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
  数列の項が400万を超えない範囲で、偶数の項の総和を求めよ。
*/

#include <stdio.h>

#define X1  1
#define X2  2
#define MAX 4000000

int judge_even(int num, int sum)
{
  if(num%2 == 0)
    sum += num;
  return sum;
}

int solve_probrem2(int x_prev1, int x_prev2)
{
  int sum = 0;
  sum = judge_even(x_prev2, sum);
  sum = judge_even(x_prev1, sum);

  while(1){
    int x   = x_prev1 + x_prev2;
    sum     = judge_even(x, sum);
    x_prev2 = x_prev1;
    x_prev1 = x;
    if(x > MAX) break;
  }

  return sum;
}

int main(void)
{
  int x_prev2 = X1;
  int x_prev1 = X2;
  int ans     = solve_probrem2(x_prev1, x_prev2);

  printf("===Problem2===\n");
  printf("Answer : %d\n", ans);
  
  return 0;
}

[実行結果]

$ ./problem2
===Problem2===
Answer : 4613732

| | コメント (0) | トラックバック (0)

2008/10/01

Project Euler Problem1

第1問

Link:Problem1 - PukiWiki

言語はCで。(将来的には色んな言語で書いてみるつもり)

/*
  Problem1

  10未満の自然数のうち、3もしくは5の倍数になっているものは
  3、5、6、9の4つがあり、これらの合計は23になる。
  同じようにして、1000未満の3か5の倍数になっている数字の合計を求めよ。
*/

#include <stdio.h>

int solve_problem1()
{
  int num;
  int sum = 0;
  
  for(num = 1; num < 1000; num++){
    if(num % 3 ==0 || num % 5 == 0)
      sum += num;
  }
  
  return sum;
}

int main(void)
{
  printf("===Problem1===\n");
  printf("Answer : %d\n", solve_problem1());
  
  return 0;
}

[実行結果]

$ ./problem1
===Problem1===
Answer : 233168

| | コメント (0) | トラックバック (0)

Project Eulerに挑戦

プログラムと数学の練習をかねてProject Eulerに挑戦してみる。

Link:Project Euler.net

また、下のサイトには問題文の日本語訳がwikiにまとめられているので便利。

Link:Project Euler - PukiWiki

| | コメント (0) | トラックバック (0)