Java

そういえば,Javaでは拡張for文があったなぁ

int[] xs = new int[10]; // ... for (int i = 0; i < 10; i++) System.out.println(xs[i]); というfor文が int[] xs = new int[10]; // ... for (int x: xs) System.out.println(x); と記述できる.これは良い. ただ,値を書き換えることはできないみたい…

Java には 何故 演算子オーバーロード がないのか?

なんで? 確かに,演算子オーバーロードは強力,故に危険でもある.でもさ,複素数型を実装したとして, c = c1.add(c2.add(c3));とかするよりも c = c1 + c2 + c3って書けたほうが,ずっと幸せだと思うんだ.つまり,複素数型,有理数型,多倍長型くらいに…

Problem 196

196 Prime triplets Problem 196 - Project Euler 素数関係の問題. code (haskell) とりあえず,ナイーブなもの. 実行時間はisPrime'の効率に依存. つまり,遅い. 1000秒もかかった. import Data.Maybe (mapMaybe) import Number (isPrime') t :: (Inte…

Problem 187

http://projecteuler.net/index.php?section=problems&id=187 まぁ,関数型ではやりにくい. とりあえず,javaで. 非常にシンプルな,ふるいを使ったアルゴリズム. import java.util.Arrays; public class P187{ public static void main(String[] args){ …

Problem 214

http://projecteuler.net/index.php?section=problems&id=214 前にHaskellで挑戦して、どうも遅くて解けなかったが、 Problem 179を解いて、ふるいを使えば効率よくΦ関数が計算できることに気がついた。 手続き型のほうが書きやすそうなのでjavaで。 public …

Problem 179

http://projecteuler.net/index.php?section=problems&id=179 たいていの場合、素因数分解は重い。 エラトステネスのふるいとDPを組み合わせたようなアルゴリズム。 単純な繰り返しでかける。Cのコード。 #include <stdio.h> #define LIM 10000001 #define SQR 3163 i</stdio.h>…

Problem 177

http://projecteuler.net/index.php?section=problems&id=177 対称性のチェックが大変。 素直な全探索なのでjavaにした。 賢い探索もあるみたいだが、やはり対称性の除外が面倒そう。 public class P177{ public static void main(String[] args){ int count…

Problem 161

http://projecteuler.net/index.php?section=problems&id=161 やっと解けた。 import java.util.*; public class P161{ static Map<Board,Long> memo; static Board board; static int h=12,w=9; static long solve(int x){ if(memo.containsKey(board))return memo.get(</board,long>…

Problem 154

http://projecteuler.net/index.php?section=problems&id=154 3項係数の約数について。 haskellでの実装。 import Control.Monad import Data.Array.Unboxed import Data.List n = 2*10^4 d = 10 main = print p154 factor p x | mod x p == 0 = succ.factor…

Problem 153

http://projecteuler.net/index.php?section=problems&id=153とりあえず書いたが、速く動かない。(10^8ってかなり大きい気がするんですが。) import Number import Data.List -- ナーイブな実装 divisors n = [(a,b)| a <- [1..n], b <- [0..n-1], mod (n*…