math314のブログ

主に競技プログラミング,CTFの結果を載せます

n以下の素数のsumを高速に計算する

目次

  • 動機
  • 問題概要
  • 準備
  • 計算量
    • \(1 \le p_b \le n^{1/4} \) の時
    • \(n^{1/4} \le p_b \le n^{1/2} \) の時
  • 素直なプログラム
  • 最適化したプログラム
  • 余談

動機

Project Euler で、n以下の素数の合計を求める問題がありました。 Problem 10 - Project Euler

この問題は2*106以下の素数の合計を求めるだけなので簡単なのですが、Lucy_Hedgehog さんという方が面白いアルゴリズムをpostしていました。

せっかくなので、なるべく初心者にも分かりやすいようにアルゴリズムの概要を説明したいと思います。 アルゴリズムとか計算量とかどうでもいい人は、

optimized_prime_sum.cpp · GitHub

のプログラムをコピペして使って下さい。

問題概要

競技プログラミングで以下のような問題が出た場合、どう実装すればいいでしょう?

\(n\)以下の素数の合計を出力して下さい。ただし、n <= 106

エラトステネスの篩を使えばn以下の素数の列挙は \( O(n \log\log (n)) \) で出来るので、このアルゴリズムで十分だと思います。

では次の制約の場合はどうでしょうか。

\(n\)以下の素数の合計を出力して下さい。ただし、n <= 1012

答えは 64bitに収まらないので、109 + 7で割った値を答えて下さい。

アトキンの篩を使えば 計算 \( O(n / \log\log(n)) \) , 空間 \( O(n^{1 / 2}) \) で計算出来る(らしい)ので、これで十分かも知れません。 が、今回は計算 \( O(n^{3/4}) \), 空間\( O(n^{1 / 2}) \) で計算出来る方法を紹介したいと思います。

続きを読む

ISUCON5 オンライン予選 通過しました

優勝賞金100万円!今年もやります ISUCON5 開催と日程のお知らせ #isucon : ISUCON公式Blog

「お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトル、それがISUCONです。過去の実績も所属している会社も全く関係ない、結果が全てのガチンコバトルです。」(公式説明)であるISUCON5のオンライン予選に参加してきました。

...

ISUCONは Iikanjini Speed Up Contest の略で、Webアプリケーションがデプロイされたイメージを渡されて、その上で何をしてもいいからとにかくパフォーマンスを上げることが競技内容です。

ISUCON5オンライン予選に参加してきた « chibiegg日誌

ということで参加してきました。

チーム マウント竹田氏(メンバー: @misodengaku, @chibiegg, @__math) で出ていました. 16位で予選通過です。 いつもは @aki33524 も参加するんですが、上限が3人までということだったので、裏番組のTrend Micro CTFを頑張ってもらいました…、きひろくんごめん。

他のメンバーの参加記です

初参加でしたが決勝に進出出来てよかったです。

続きを読む

任意modでの畳み込み演算をO(n log(n))で

http://misawa.github.io/other/fast_kitamasa_method.html を見て刺激されたので書いた.

  1. 畳み込み演算?
  2. 任意modでの畳み込み演算
  3. 中で使われてる技術達
  4. c++のコード

コードと原理の説明をちょっとだけ載せています.

コードだけ欲しい人は https://gist.github.com/math314/6a08301b8b75b8172798 をどうぞ. fast_int32mod_convolution を使うとint32の任意のmodが取れます.

実はまだverifyしてない.

続きを読む

SECCON CTF 2014 決勝戦 サーバ六 write-up

SECCON CTF 2014決勝戦・全国大会カンファレンス

チーム Mr.Takedashi(メンバー: @misodengaku, @aki33524, @chibiegg, @__math) で出ていました. 9/24位です. 日本人チームの中では4/13位でした.今年はcryptoがあったので幾つか問題が解けました.

他のメンバーのwrite-upです

SECCON 2014全国 - aki33524の日記

SECCON CTF 2014 決勝戦 参加記 « chibiegg日誌

SECCON 2014 全国大会に出た - misodengakuのブログ

去年も決勝大会(http://math314.hateblo.jp/entry/2014/03/03/210318)に出たのですが,順位が下の方で悔しい思いをしました.2014年も出れたなら1桁の順位をとろう!とチームで言っていたので,目標が達成出来て満足です.

私は主に サーバ六 の問題を担当したので,簡単にwrite-up を書きたいと思います.

続きを読む

dwangoプログラミングコンテスト

Welcome to dwangoプログラミングコンテスト - dwangoプログラミングコンテスト | AtCoder

26位でした.D問題が通せなかったの悲しいですね.