にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

ProjectEuler

Problem 20

n × (n - 1) × ... × 3 × 2 × 1 を n! と表す。 100! の各桁の数字の合計を求めよ。 Problem 20 - PukiWiki 今日もRubyで手抜き。 File Edit Options Buffers Tools Help #! /usr/bin/env ruby fa = 1 100.downto(1) {|i| fa *= i } puts fa.to_s.split('').…

Problem 16 -Ruby編-

2^15 = 32768 であり、これの各数字の合計は 3 + 2 + 7 + 6 + 8 = 26 となる。 同様にして、2^1000 の各数字の合計を求めよ。 Problem 16 - PukiWiki 番外編的な扱いで。 2の1000乗をCで扱うにはBignumを実装しなければならなさそう(またはOpenSSLのBNを使う…

Problem 15

Problem 14がなかなか解けないので先に15を解くことにする。 14の計算が終わらないのはきっとアルゴリズムが悪いんだな…。 2x2のマス目の左上からスタートした場合、引き返しなしで右下にいくルートは 6 つある。 では、20 × 20 のマス目ではいくつのルート…

Problem 13

以下の50桁の数字100個の総和の上位10桁を求めよ。 Problem 13 - PukiWiki Rubyだとこの数値を型を気にすることなく計算できて楽なのだけど…。 #include <stdio.h> #include <stdlib.h> #include <math.h> static char values[100][50] = { "371072875339021027987979982208375902465101</math.h></stdlib.h></stdio.h>…

Problem 12

(前略) では、501 個以上の約数をもつ最初の三角数はいくらか。 Problem 12 - PukiWiki 約数チェックを全探索してるといつまでも終わらなかったので大幅に削減しました。 #include <stdio.h> #include <math.h> void problem012() { int ans; int term; /* 項の値 */ int term</math.h></stdio.h>…

Problem 11

日課の一問。 (略) 上の 20 × 20 の数字のなか、赤くマークされた数字の積は 26 × 63 × 78 × 14 = 1788696 となる。 上下左右斜めのいずれかの方向で連続する4つの数字の積のうち最大のものを求めよ。 Problem 11 - PukiWiki 横方向・縦方向・右斜め下方向・…

Problem 10

もう一つ解くよ。 10以下の素数の和は2 + 3 + 5 + 7 = 17である. 200万以下の全ての素数の和を計算しなさい. Problem 10 - PukiWiki Problem 7で使ったis_prime関数を流用して素数判定する予定だったけど、Wikipediaの素数判定の項にあるサンプルプログラム…

Problem 9

今日も一つ、解いていくよ。 ピタゴラスの三つ組(ピタゴラスの定理を満たす整数)とはa Problem 9 - PukiWiki 順番にやっていくだけで充分。二重のfor文から抜けたかったのでgotoを使用。 #include <stdio.h> #define NUM_MAX 1000 void problem009() { int ans; int a</stdio.h>…

Problem 8

以下の1000桁の数字から5つの連続する数字を取り出して その積を計算する。そのような積の中で最大のものの値はいくらか (略) Problem 8 - PukiWiki こりゃまたでかい数値だなぁー、これは文字列として扱うしかないな、と思った。 #include <stdio.h> #include <string.h> #in</string.h></stdio.h>…

Problem 7

10001番目の素数を求めます。 素数を小さい方から6つ並べると 2, 3, 5, 7, 11, 13 であり、6番目の素数は 13 である。 10001 番目の素数を求めよ。 Problem 7 - PukiWiki 力技で順番に数えていきました。 #include <stdio.h> #include <math.h> #define PRIME_ORDER 10001 int</math.h></stdio.h>…

Problem 6

今回は簡単だな。まだまだ序盤だからか。 最初の10個の自然数について、その和の二乗と、二乗数の和は以下の通り。 1² + 2² + ... + 10² = 385 (1 + 2 + ... + 10)² = 3025 これらの数の差は 3025 - 385 = 2640 となる。 同様にして、最初の100個の自然数に…

Problem 5

久しぶりにデスクトップPCの前に座ったので続きを。 2520 は 1 から 10 の数字の全ての整数で割り切れる数字であり、そのような数字の中では最小の値である。 では、1 から 20 までの整数全てで割り切れる数字の中で最小の値はいくらになるか。 Problem 5 - …

Problem 4

左右どちらから読んでも同じ値になる数を回文数という。 2桁の数の積で表される回文数のうち、最大のものは 9009 = 91 × 99 である。 では、3桁の数の積で表される回文数のうち最大のものはいくらになるか。 Problem 4 - PukiWiki 求める数は6桁になるという…

Problem 3

13195 の素因数は 5、7、13、29 である。 600851475143 の素因数のうち最大のものを求めよ。 Problem 3 - PukiWiki 以下のステップでプログラムを作成。 target:素因数分解の対象となる数(600851475143)、divider:割る数、loop_max:dividerの上限、とする。 …

Problem 2

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

Problem 1

Problem 1から順番にやっていきます。 10未満の自然数のうち、3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり、 これらの合計は 23 になる。 同じようにして、1,000 未満の 3 か 5 の倍数になっている数字の合計を求めよ。 Problem 1 - Puki…

Project Eulerを始めてみる

gomi-boxさんのところで、Project Eulerをやっていて興味を惹かれたので、私も挑戦してみることにします。 最近プログラムを書いていない鬱憤晴らしと勉強を兼ねてC言語で。 まずは環境作り 問題を解くのに集中できるよう、解答プログラムのテンプレートを用…