Project Euler

問題141 Scheme での実装例

Scheme で書いてみた。ロジックは先日書いた通りで、単にプログラムを起こしただけです。 (define (problem-141 limit) (let ((lim (expt limit (/ 1 4)))) (define (iter-k q p k sum) (let ((nn (* (+ (* k p p p) q) k q))) (if (>= nn limit) sum (iter-…

問題141を解く(その2)

解法のひとつです。 幾何数列に着目するってもの考えたんだけどなあ。 いまいち無理でしたw 幾何数列「a, ca, c^2 a」における比率を「c」とします。 gcd(p, q) == 1 の場合、c は p/q と書くことができます。 したがって、n^2 == c^3*a^2 + a がわかります…

問題141をやってみた

メインから。 時間を計るので、ちょいゴタゴタしてます。 1兆までなのでかなり時間がかかります。 いえ、力技コードなので処理時間は気にしてないですw #include <iostream> #include <chrono> int main() { long long limit = 1000000000000; std::chrono::system_clock::tim</chrono></iostream>…

問題146 改

n^2 + k (k=1,3,7,9,13,27) は、式全体として奇数にならないと素数である可能性はありません。 足し算の偶奇の組み合わせは、以下の 3 つがあります。 交換法則が使えますので、重複分は割愛します。 偶数 + 偶数 = 偶数 ... k は奇数なのでありえません 偶…

問題146

問題 146 です。数学的解法により高速化するというより、プログラムの高速化技法を用いて解く問題だと思いました。 (いつも使用している Scheme ではなくて、高速で動作する c で書いたのはヒミツです) #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include <math.h> b</math.h></stdbool.h></string.h></stdlib.h></stdio.h>…

幾星霜の時を経て一問解く

問題 142 です。問題の内容は公式サイトをご覧ください。 公式サイトは英語ですが、有志の方々が日本語に翻訳しているページもあったりします。最初に書いたプログラムはこちら。 (define nil '()) (define (pe142 low high) (define (iter-x x) (if (> x hi…

問題 156 の改良

力技で問いた結果のログから規則性を調べて改良してみました。 前よりは格段に速いですが、計算で求めてはいないので、 めちゃくちゃ速いというわけでは無いです。 #include <iostream> #include <math.h> using namespace std; void f(unsigned long long n, unsigned long lo</math.h></iostream>…

久々に解く

Project Euler の問題 156 です。使用言語は c++。 ちなみに、もうデータ量が多すぎてエクセルさんに貼り付けてデータ解析するのが厳しいですw #include <iostream> #include <math.h> #include <time.h> using namespace std; unsigned int f(unsigned long long n, unsigned int d) </time.h></math.h></iostream>…