Project Euler (Problem 2) その2
Haskellがあまりにも遅いので、Cで書くとどうなるか試した。
なんとシステムタイムは0.000sだ。10年振りのCだが、中身はrubyと変わらないので、一応書くことができた。でも、gccから喰らうエラー一点は見逃している(だって、動くんだもん)。
普段、コンパイルを必要とする言語で処理を書くことはないが、偶には、Cも書かねば・・・と思った瞬間である。
c=2, r=2, sum=0 c=5, r=8, sum=2 c=8, r=34, sum=10 c=11, r=144, sum=44 c=14, r=610, sum=188 c=17, r=2584, sum=798 c=20, r=10946, sum=3382 c=23, r=46368, sum=14328 c=26, r=196418, sum=60696 c=29, r=832040, sum=257114 c=32, r=3524578, sum=1089154 r=5702887 sum=4613732
real 0m0.145s user 0m0.140s sys 0m0.000s
#include <stdio.h>
main(){
int c,r;
int sum = 0;
for( c=1; c < 400; c++ ){
r = fiv( c );
if( 4000000 < r ){
printf("r=%d sum=%d\n",r,sum );
exit( 0 );
}else if( (r % 2) == 0 ){
printf( "c=%d, r=%d, sum=%d\n",c,r,sum );
sum = sum + r;
}
}
}
int fiv( int n ){
int r;
if( n <= 0 ){
r = 0;
}else if( n == 1 ){
r = 1;
}else if( n == 2 ){
r = 2;
}else{
r = fiv( n-1 ) + fiv( n-2 );
}
return( r );
}
preタグの中身は改行だらけになるが、対処法がわからないので、これにて失礼。
(2024/7/29 にMarkdownに修正。Mardownをデフォルトにしたいのだが。。。#include <stdio.h>が消えるのが悲しい。が、なんとか出せた。)
Comments